目前主流的数据仓库分层大多为四层,也有五层的架构,这里介绍基本的四层架构。 分别为数据贴源层(ods)、数据仓库明细层(dw)、多维明细层(dws)和数据集市层(dm)。
下面是架构图:
数据分层的目的是:减少重复计算,避免烟囱式开发,节省计算资源,靠上层次,越对应用友好,也对用户友好,希望大部分(80%以上)的需求,都用DWS,DW的表来支持就行,所以ODS层数据不能被DM层任务引用,需要抽取数据到DW,或者DWS。
DWS汇总层应优先调用DW明细层。在调用可累加类指标计算时,DWS汇总层尽量优先调用已经产出的粗粒度汇总层,以避免大量汇总都直接从海量的明细数据层计算。
DM层优先调用DWS,视情况小部分可以调用DW,禁止直接调用ODS数据,避免出现过度的ODS层引用、不合理的数据复制以及子集合冗余
DM层任务的深度不宜过大(建议不超过10层)。
总的来说,数据分层的目的如下:
- 清晰数据结构:让每个数据层都有自己的作用和职责,在使用和维护的时候能够更方便和理解
- 复杂问题简化:将一个复杂的任务拆解成多个步骤来分步骤完成,每个层只解决特定的问题
- 统一数据口径:通过数据分层,提供统一的数据出口,统一输出口径
- 减少重复开发:规范数据分层,开发通用的中间层,可以极大地减少重复计算的工作
数据贴源层(ods):用来储存原始数据,同步的脚本和数据的表,要和原始的表有一定的联系,用于方便数据治理,数据溯源等。一般,同步的脚本,和ods的表要体现源数据库表的特征,一般表名和字段名,字段格式,都和原始表保持一致,同步的形式包括增量同步和全量同步。
数据仓库明细层(dw):这一层存放的是一致的、准确的、干净的数据,即对源系统数据进行了清洗(去除了杂质)后的数据。一层一般来说是按照维度建模抽取的明细数据。通常是星形或雪花结构的数据。
多维明细层(dws):这一层存放的是DW层的,一些通用的汇总数据。一般是某个主题的某个维度的汇总数据,用于提供后续的业务查询,OLAP分析,数据分发等。一般来说,该层的数据表会相对较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。
数据集市层(dm):该层主要是提供给数据产品和数据分析使用的数据,这层就是根据需求来抽取数据了。
一般来说,数据分层之后,还需要对开发数据的任务,进行规范,比如字段格式,字段名称拼写,主题划分等,不然单纯分层,是不足以建立好一个对开发友好,方便运维,方便取数的数仓的,这个分层就是一个货物仓库里面各个房间的划分,但是里面货物需要怎么放,放在哪个房间那个位置,我想要某个数据应该怎么找,这个就需要一整套数据开发规范,以及对应的数据地图,数据血缘关系系统的支持了。
总的来说,数据层是数仓的骨头支架,但是肌肉,心脏等这些器官,对建立一个好的数仓,也很关键。
参考文章:数据仓库(6)数仓分层设计