在数据开发中,我们都希望自己的数据结构清晰、数据关系条理化,能够在系统中有层级、有顺序地流转,使用者与设计者能够进行数据血缘追踪,清晰地看清楚数据的整个生命周期。因此,需要一套行之有效的数据组织、管理和处理方法,来让我们的数据体系更加有序,这就是数据分层。
对于数仓分层,不同的厂商、不同的业务服务类型对数据仓库分层也有各自不同,没有标准说一定要分3层、4层还是5层才是最好的分层,重点还是满足业务与企业发展的需要。一般情况下,理论上通用的分层如下图所示:
1. ODS: 源数据层(Operation Data Store )
也称为贴源层,存储采集的原始数据,其结构上与源系统基本保持一致,存储的数据量是最大的。一般情况下,为了便于简化后续数据加工处理与数据追溯等问题,对于该层不建议做过多的数据清洗工作,原封不动地接入原始数据、保持数据原貌即可,至于数据清洗处理(如去噪、去重、异常值处理等)可以放在后面的 DWD 层来做。
2. DW:数据仓库层(Data Warehouse)
该层将从 ODS 层中获得的数据按照主题建立各种数据模型,每一个主题对应一个宏观的应用分析领域,数据仓库层排除对应用分析无用的数据,提供特定主题的简明视图。它存放明细事实数据、维表数据及公共指标汇总数据。其中,明细事实数据、维表数据一般根据ODS层数据加工生成。公共指标汇总数据一般根据维表数据和明细事实数据加工生成。
它又细分为:DWD数据明细层(Data Warehouse Detail)、数据服务层(Data WareHouse Servce)、DWT数据主题层(Data Warehouse Topic)与DIM维表层(Dimension)。
3. DWD:数据明细层(Data Warehouse Detail)
该层主要是针对ODS层进行数据清洗(如去除空数据、脏数据、离群值等)、规范化与脱敏。同时,为了提高数据明细层的易用性,该层会采用一些维度退化(维度退化即采用维度模型的方式重新建模)方法,将维度退化至事实表中,减少事实表和维表的关联。
事实表作为数据仓库维度建模的核心,需要紧紧围绕着业务过程来设计,即以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。事实表里面的一条数据都代表一个业务事件,如下单、支付、退款、评价等等。"事实"这个术语表示的是业务事件的"度量值"(可统计次数、个数、金额等等),所以订单表便是一张事实表。
4. DWS:数据服务层(Data WareHouse Servce)
该层以DWD层为基础,统计各个主题对象的当天行为,按天进行轻度汇总。它服务于 DWT 层的主题宽表,一行信息代表一个主题对象一天的总行为,例如一个用户一天下单次数。
5. DWT:数据主题层(Data Warehouse Topic)
该层以DWS层的数据为基础,按主题进一步进行汇总,即以分析的主题对象为建模驱动,基于上层的应用和产品的指标需求,构建主题对象的全量宽表。一行信息代表一个主题对象的累积行为,例如一个用户从注册那天开始至今一共下了多少次单。
6. DIM:维表层(Dimension)
也称查找表(Lookup Table),它是与事实表相对应的一种表,一般是对事实的描述信息,每一张维度表对应现实世界中的一个对象或者概念。它保存了维度的属性值,可以跟事实表做关联,相当于将事实表上经常重复出现的属性抽取、规范出来用一张表进行管理。如:日期表(存储与日期对应的周、月、季度等的属性)、地点表(包含国家、省/州、城市等属性)等。
维度表主要是包含两个部分:
1)高基数维度数据:一般是用户资料表、商品资料表类似的资料表,数据量可能是千万级或者上亿级别;
2)低基数维度数据:一般是配置表,比如枚举字段对应的中文含义,或者日期维表等;数据量可能就是个位数或者几千几万。
7. ADS:数据应用层(Application Data Service)
该层是数据仓库的最上层,主要用于支持具体特定的业务需求与应用场景。在该层会根据具体的业务需求与应用场景,对数据进行进一步的分析和处理,例如进行报表统计、分析报告、数据预测与推荐等。