1、为什么要分层
在未分层的情况下,数据之间的耦合性与业务耦合性是不可避免的,当源业务系统的业务规则发生变化时,可能影响整个数据的清洗过程。这就好比把衬衫、裤子、袜子、外套分类存放整理 就比 打散之后不分类的整理哪一种更让人舒服,更容易找呢?
2、分层的好处
数据分层简化了数据清洗的过程,每一层的逻辑变得更加简单和易于理解,当发生错误或规则变化时,只需要进行局部调整。
通过大量的预处理来提升应用系统查询速度,进而提升的用户体验,因此数据仓库会冗余大量的数据,是典型的空间换时间的策略。这好处还真有点像衣服归类存放的好处,有些东西不用刻意记,想一种日常现象理解更容易
3、数据仓库分层
其实各种分层无论是接下来常用的分层还是阿里的分层,只有适合当前业务的分层才是最好的分层;有的公司业务没有那么麻烦,就只要把数据理清楚,分清楚就OK,不一定非要按着这个分层;
3.1、数据操作层-ODS
全称是Operational Data Store,又叫数据准备层,数据来源层;日志或者关系型数据库,并通过Flume、Sqoop、Kettle等etl工具导入到HDFS,并映射到HIVE的数据仓库表中。主要用于原始数据在数据平台的落地,这些数据从数据结构,数据之间的逻辑关系上都与原始数据保持一致,在源数据装入这一层时,要进行诸如业务字段提取或去掉不用字段,脏数据处理等等。可以理解为是关系层的基础数据
1) 数据结构:数据机构与原始数据基本保持一致
2) 存储周期:ODS默认保留近30天的数据
3) 表命名规范:[层次]_[主题]_[表内容]_[分表规则]
ODS层数据的来源方式:
1) 业务库
经常会使用sqoop来抽取,比如我们每天定时抽取一次。在实时方面,可以考虑用canal监听mysql的binlog,实时接入即可。
2)埋点日志
线上系统会打入各种日志,这些日志一般以文件的形式保存,我们可以选择用flume定时抽取,也可以用用spark streaming或者storm来实时接入,当然,kafka也会是一个关键的角色。
3)其它数据源
这和具体的业务相关
3.2、公共的信息层-DIM
主要存放公共的信息数据,比如国家代码和国家名,地理位置等信息就存在DIM层表中,对外开放,用于DWD,DWS和APP层的数据维度关联。可以理解为一些字典表、单独存放
1) 数据机构:维表,以国家ID等字段为主键
2) 存储周期:按需存储,一般会保留历史至今所有的数据
3) 命名规范:
所有维度表都在DIM下面。
dim.dim+_业务描述
举例: dim.dim_year 时间维表
3.3、数据明细层-DWD
全称是Data Warehouse Detail,用于源系统数据在数据平台中的永久存储。它用以支撑DWS层和DM层无法覆盖的需求,比如像用户通话详单类业务需求。该层的数据模型不建议开给不懂技术的业务人员直接使用。这一层主要解决一些数据质量问题和数据的完整度问题。比如商场的会员信息来与不同表,某些会员的的和数据可能不完整等等问题,我们可以再这一层做一些屏蔽
1) 数据结构:数据结构与源系统保持一致
2) 存储周期:保留历史至今所有的数据
3) 命名规范:dwd.dwd_业务描述+_时间粒度
举例: dwd.dwd_sales_d 销售详细日志
3.4、数据汇总层- DWS层
全称是Data Warehouse Service,主要包含两类汇总表:一是细粒度宽表,二是粗粒度汇总表。我们拿商场售卖举例,那么包含基于订单、会员、商品、店铺等实体的细粒度宽表和基于维度组合(会员日进场汇总、会员消费汇总、商场销售日汇总、店铺销售日汇总等)的粗粒度汇总表。这层是对外开放的,用以支撑绝大部分的业务需求,汇总层是为了简化源系统复杂的逻辑关系以及质量问题等,这层是的业务结构容易理解。各个层面的工程师容易上手。dws层的汇总数据目标是能满足80%的业务计算。
1) 数据机构: 宽表:以业务实体进行展开,将与业务有关的相关字段和属性进行预关联,预处理和预计算,对业务实体进行拉伸形成宽表.汇总表:维度组合形成的汇总表
2) 存储周期:原则上保留历史至今全部的数据
3) 命名规范:
所有数据汇总层的表都放在DWS下面
dws.dws_业务描述+_时间粒度+_sum
举例:dws.dws_trans_d_sum 交易日汇总表
4、数据仓库分层-阿里
4.1、ODS 数据准备层
功能:ODS层是数据仓库准备区,为DWD层提供基础原始数据,可减少对业务系统的影响
建模方式及原则:从业务系统增量抽取、保留时间由业务需求决定、可分表进行周期存储、数据不做清洗转换与业务系统数据模型保持一致、按主题逻辑划分。
4.2、DWD 数据明细层
功能:为DW层提供来源明细数据,提供业务系统细节数据的长期沉淀,为未来分析类需求的扩展提供历史数据支撑
建模方式及原则:数据模型与ODS层一致,不做清晰转换处理、为支持数据重跑可额外增加数据业务日期字段、可按年月日进行分表、用增量ODS层数据和前一天DWD相关表进行merge处理。
4.3、DW(B/S) 数据汇总层
功能:为DW、ST层提供细粒度数据,细化成DWB合DWS;DWB是根据DWD明细数据经行清晰转换,如维度转代理键、身份证清洗、会员注册来源清晰、字段合并、空值处理、脏数据处理、IP清晰转换、账号余额清洗、资金来源清洗等;DWS是根据DWB层数据按各个维度ID进行粗粒度汇总聚合,如按交易来源,交易类型进行汇合
建模方式及原则:
1) 聚合、汇总增加派生事实;
2) 关联其它主题的事实表,DW层可能会跨主题域;
3) DWB保持低粒度汇总加工数据,DWS保持高粒度汇总数据;
4) 数据模型可能采用反范式设计,合并信息等。
4.4、DM 数据集市层
功能:可以是一些宽表,是根据DW层数据按照各种维度或多种维度组合把需要查询的一些事实字段进行汇总统计并作为单独的列进行存储;满足一些特定查询、数据挖掘应用;应用集市数据存储
建模方式及原则:
1) 尽量减少数据访问时计算,优化检索;
2) 维度建模,星型模型;
3) 事实拉宽,度量预先计算;
4) 分表存储
4.5、ST 数据应用层
功能:ST层面向用户应用和分析需求,包括前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析,面向最终结果用户;适合作OLAP、报表模型,如ROLAP,MOLAP;根据DW层经过聚合汇总统计后的粗粒度事实表
建模方式及原则:
1) 保持数据量小;
2) 维度建模,星形模型;
3) 各位维度代理键+度量;
4) 增加数据业务日期字段,支持数据重跑;
5) 不分表存储