一、什么是数据仓库分层设计
数据仓库分层设计一般是指:数据仓库按照ODS->DWD(DIM)->DWS->ADS层级设计。
每一层对应相关的物理表,实现不同的功能,下面详细介绍。
二、为什么要进行数据仓库分层
1、数据结构清晰化:每一个数据分层都有其特定的作用域和职责,这使得在使用数据时能够更方便地定位和理解(例如ODS一般与业务库表名(表名会增加ODS前缀和后缀)、字段名完全一致)。
2、减少重复开发:通过规范数据分层,开发一些通用的中间层数据,可以减少重复计算,提高开发效率(例如ADS层,口径一致的情况下引用相同的DWS层)。
3、统一数据口径:数据分层可以提供统一的数据出口,确保对外输出的数据口径一致(采用相同的DWS,数据口径一致)。
4、复杂问题简单化:将复杂的任务分解成多个步骤完成,每一层解决特定的问题,从而提高数据处理效率和准确性(每一层完成特定的功能,而不是在一层上实现,这一层又要实现增量逻辑,还要实现口径;后期出现迭代的时候,变更很容易出现问题)。
5、性能优化:不同的数据层可以使用不同的技术和工具来优化性能(例如DWS主题层,特定的粒度,数据量会变少)
6、快速应对变化:例如业务系统字段名称或者表发生变化,一般只需要在ODS、DWD进行应对变更即可,不影响上游表(bad case:所有的报表应用都直接使用从业务库同步过来的,此表发现变更,所有的报表应用都需要调整,此时如果有上千个报表,将是巨大的工作量)。
7、数据复用最大化:通过汇总层的引入,避免了下游逻辑的重复计算,节省了开发时间和精力,减少了不必要的数据冗余。
主要总结了以上几点,可结合自己的经验,进行相关总结。
三、怎么进行分层
数仓一般分为以下几层:
1、数据引入层ODS(Operational Data Store)
2、公共维度层DIM(Dimension)、明细数据层DWD(Data Warehouse Detail)
3、汇总数据层DWS(Data Warehouse Summary)
4、应用数据层ADS(Application Data Service)
各个分层的功能介绍如下:
1、数据引入层 ODS(Operational Data Store)
ODS层:同步数仓需要使用到的业务数据。
表的结构与业务系统中的表结构一致,是数据仓库的数据准备区。
ODS层对原始数据的操作具体如下:
将原始数据增量或全量同步至数据仓库中。
ODS层的数据表,命名一般以ods开头,并且设置相应的生命周期(根据实际情况,如果是以后不会变更的数据,则可以设置为永久)。
2、明细数据层 DWD(Data Warehouse Detail)
DWD层:构建最细粒度的明细数据表(例如:订单粒度、订单商品粒度)。
一般情况下会将明细数据表的某些重要维度属性字段适当冗余,即宽表化处理。有时候发现字段太多,也可能会适当的减少某些字段(ODS表中有,需要时可以快速增加)
注意:宽表化会遇到一个问题就是维度的变化,特别是一些名称类的变化,有时候业务想看到最新的名称、有时间想看是当时的名称,此处的冗余一般只能满足一种情况。
3、汇总数据层 DWS(Data Warehouse Summary)
DWS层:按照特定的维度,构建公共粒度的汇总指标事实表。
例如:日期、门店、相关指标(销售额等)
4、应用数据层 ADS(Application Data Service)
ADS层用:服务于特定的应用,例如报表、标签等。
注意:口径可以个性化,但是一些通用口径建议提升到DWS中,提高复用性。
5、公共维度层 DIM(Dimension)
DIM层:构建整个企业的一致性数据分析维表,帮助您降低数据计算口径和算法不统一的风险。
一般用到的技术:缓慢变化维度。