1.为什么分层?
1.空间换时间
2.便于计算
3.逻辑清晰
2.业务数据库(mysql,mongdb,oracle数据源)
ODS(可操作数据层)
DW(数据仓库层)
DWD层 (数据明细层)
负责数据的最细粒度的数据
经过了ODS层清洗(去空),去重,去燥,去除大于或者小于一定阈值的明细数据。
DWM层 (数据中间层)
在DWD层基础上,进行轻度汇总,结合常用维度(时间,地点,组织层级,用户,商品等)
DWS层(数据汇总层)宽表
面向主题的汇总,维度相对来说比较少
高度聚合的标
电商为例,以人这个主题。人(用户):当前人登录次数,浏览次数,购买次数,访问频度等。
DAS(数据应用服务层)
业务主题,提供业务应用的数据准备。
BDM 层(源数据层):缓冲数据,源数据的直接映射 FDM 层(对 BDM 源数据层的数据进行清洗和预处理):基础数据层,数据拉链处理、分区处理 GDM 层(对 FDM 层数据 进行统计一些指标数据):通用聚合 ADM 层(对 GDM 层指标数据 进行指标数据的业务汇总分析):高度聚合
2.Hive(十)Hive性能调优总结
https://www.cnblogs.com/frankdeng/p/9463897.html
https://blog.csdn.net/scgaliguodong123_/article/details/45477323
3.数据仓库分层实现
http://cxy7.com/articles/2017/06/24/1498268635086.html
https://www.imooc.com/article/36501
4.数仓建模
http://lxw1234.com/archives/2018/01/890.htm
2.1为什么分层
为什么要分层?
ODS层
ODS(Operational Data Store)操作数据存储
是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的ETL之后,装入本层;一般来说ODS层的数据和源系统的数据是同构的,主要目的是简化后续数据加工处理的工作。从数据粒度上来说ODS层的数据粒度是最细的。
ODS层的表通常包括两类,一个用于存储当前需要加载的数据,一个用于存储处理完后的历史数据。
历史数据一般保存3-6个月后需要清除,以节省空间。但不同的项目要区别对待,如果源系统的数据量不大,可以保留更长的时间,甚至全量保存;
数据在装入本层前需要做以下工作:
DW层
数据仓库层(DW),是数据仓库的主体
通常按照主题建立各种数据模型,如:星形或雪花结构等;
有关维度建模的方法及星型、雪花模型等请参考《维度建模法》
在PDW层会保存BI系统中所有的历史数据,例如保存10年的数据。
DM层
数据集市层(DM)date market,又称DWS, data warehouse service或主题层,存放的是轻度聚合的数据。
通常根据业务需求,划分成流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询,OLAP分析,数据分发等。
从数据粒度来说,这层的数据是轻度汇总级的数据,已经不存在明细数据了。从数据的时间跨度来说,通常是DW层的一部分,主要的目的是为了满足用户分析的需求,而从分析的角度来说,用户通常只需要分析近几年(如近三年的数据)的即可。从数据的广度来说,仍然覆盖了所有业务数据。
APP层
数据产品层(APP),这一层是提供为数据产品使用的结果数据。
从数据粒度来说是高度汇总的数据。从数据的广度来说,则并不一定会覆盖所有业务数据。从极端情况来说,可以为每一张报表在APP层构建一个模型来支持,达到以空间换时间的目的。
应用层是根据业务需要,由前面三层数据统计而出的结果,可以直接提供查询展现,或导入至Mysql中使用。
需要一个管理元数据信息的系统 能够提供方便的元数据的操作和查询操作
主要是提供给数据产品和数据分析使用的数据,一般会存放在es、mysql等系统中供线上系统使用,也可能会存在Hive或者Druid中供数据分析和数据挖掘使用
我们经常说的报表数据,或者说那种大宽表,一般就放在这里
数据仓库的标准分层只是一个建议性质的标准,实际实施时需要根据实际情况确定数据仓库的分层,不同类型的数据也可能采取不同的分层方法。
三层模型
Buffer数据缓存层
用于存放接口方提供的原始数据的数据库层,此层的表结构与源数据保持基本一致,数据存放时间根据数据量大小和项目情况而定,如果数据量较大,可以只存近期数据,将历史数据进行备份。此层的目的在于数据的中转和备份。
其它两次与四层模型类似,只是把更多逻辑放在了DW层里