数据仓库采用分层架构,分为缓冲层、操作数据层、明细数据层、汇总数据层和数据集市层。如图为数据仓库分层架构示意图。
1、缓冲层
概念:用于存储每天的增量数据和变更数据。
- 数据生成方式:直接从Kafka接收源数据或从业务库抽取,需要业务表每天生成update、delete、insert数据,只生成insert数据的业务表,数据直接接入操作数据层。
- 讨论方案:只把Kafka消息直接接入缓冲层,对于其他有拉链数据的业务,也接入缓冲层。
- 日志删除方式:只存储最近几天的数据。
- 表Schema:一般按天创建分区。
2、操作数据层
概念:数据仓库的细节数据层,对缓冲层数据进行沉淀,减小了抽取的复杂性。同时ODS 的信息模型组织主要遵循企业业务事务处理的形式,将各种专业数据进行集中,操作数据层的粒度跟缓冲层一致。
- 数据生成方式:部分数据直接来自Kafka,部分数据为缓冲层数据与历史数据的合成。
- 讨论方案:每天把操作数据层的前天全量数据和缓冲层的昨天新数据合成一个新的数据表,覆盖旧表。
- 日志删除方式:长久存储。
- 表Schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
3、明细数据层
概念:数据仓库的明细数据层,同时 DWD 的信息模型组织主要遵循企业业务事务处理的形式,将各种专业数据进行集中,明细数据层的粒度跟操作数据层一致,属于分析的公共资源。 ○
- 数据生成方式:在操作数据层清洗或JOIN维度表之后生成。
- 日志删除方式:长久存储。
- 表Schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
- 库与表命名:库名为dwd;表名,初步考虑格式为dwd_业务表名。
- 旧数据更新方式:直接覆盖。
4、汇总数据层
概念:在数据仓库中明细数据层和数据集市层之间的一个过渡层次,对明细数据层的生产数据进行轻度综合和汇总统计。汇总数据层与明细数据层的主要区别在于二者的应用领域不同,明细数据层的数据来源于生产型系统,并为满意一些不可预见的需求而进行沉淀;汇总数据层则面向分析型应用进行细粒度的统计和沉淀。
- 数据生成方式:由明细数据层按照一定的业务需求生成轻度汇总表。明细数据层需要复杂清洗的数据和需要MR处理的数据也经过处理后接入汇总数据层。
- 日志删除方式:长久存储。
- 表Schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
- 库与表命名:库名为dws;表名,初步考虑格式为dws_日期_业务表名。
- 旧数据更新方式:直接覆盖。
5、数据集市层
概念:数据集市层又称为数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后续的业务查询、OLAP分析、数据分发等。
- 数据生成方式:由汇总数据层和明细数据层的数据计算生成。
- 日志删除方式:长久存储。
- 表Schema:一般按天创建分区,没有时间概念的按具体业务选择分区字段。
- 库与表命名:库名为dm;表名,初步考虑格式为dm_业务表名。
- 旧数据更新方式:直接覆盖。
总结起来,数据仓库分层有如下好处。
第一,数据结构更明确。分层之后,每一层都有其作用域,这样我们在使用表的时候,能更方便地理解,提高工作效率。
第二,数据血缘追踪,便于管理。数据团队产出的是一个个能直接使用的业务表,这些表的来源有很多,假如某一个来源表出问题了,但有了分层,数据血缘关系更清晰,它能够帮助我们快速准确地定位到问题,并清楚问题的影响范围。
第三,复杂问题简单化。分层之后,一个复杂的任务被分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复即可。
第四,表共用,减少了重复计算。由于数据仓库的分层设计,通过开发一些共用的中间层数据表,进而减少了重复计算,节省了计算资源。
第五,屏蔽原始数据的异常和业务变更的影响。比如,当业务发生变更(如对日志增加了一个新的字段)时只会影响最底层的数据仓库表结构,不会影响上层的数据业务层(如数据集市层),应用方对底层的数据异常无感知,从而降低了应用方因数据异常和业务变更带来的风险。