一、为何分层?
随着信息技术的快速发展,传统数据库已经无法存储和处理海量的数据,数据仓库应运而生。数据仓库是用于支持企业决策制定和分析
,它通过将不同来源的数据整合在一起,为用户提供一致、全面且易于访问的数据视图。可以理解为数据仓库就是专门用来存储和分析海量
的历史数据,让数据真正地产生价值,为企业赋能
。
而数仓的分层,则是为了更好的去组织、管理、维护这些数据,优秀的分层设计可以大大提升整个数仓的可靠性、可维护性、灵活性。主要有以下几个优点:
- 数据结构清晰
- 统一数据口径
- 减少重复计算和资源浪费
- 数据血缘追踪
二、分层模型
在业界中,数仓常见的分层一般分为如下层级:
- 操作数据层ODS(Operational Data Store)
公共数据模型层CDM(Common Data Model)
- 数据明细层DWD(Data Warehouse Detail)
- 数据汇总层DWS(Data Warehouse Summary)
- 维度层DIM(Dimension Layer)
- 应用数据层ADS(Application Data Store)
三、数仓各层级设计
3.1 ODS层
ODS - 操作数据层(Operation Data Store),这是最接近业务系统的一层,我们定期通过ETL(抽取、转换、装载)操作
将源头的数据装载到该层,但目前在建设ODS层时,一般不对源头数据做过多的处理,尽量保持原样,后续有利于进行数据追溯
。
设计原则:
- 命名规范:ODS_业务域_主题域_表名_标记(标记一般标识其他属性,比如表是天级的还是月级的,是全量的还是增量的)
- 数据在结构上与源系统基本保持一致
- 半结构化数据需要解析
3.2 CDM层
CMD - 公共数据层(Common Data Model),又称通用数据模型层,是数据仓库的核心处理层
。它基于ODS层的数据,进行更深层次的加工和整合,形成面向分析和统计的数据模型。CDM层通常包括维度表(DIM)、明细表(DWD)和汇总表(DWS)等组成部分。这些表通过统一的维度和指标定义,实现了数据的规范化和标准化
,为后续的数据分析提供支持
3.2.1 DWD层
DWD - 数据明细层(Data Warehouse Detail),这一层要做的就是将ODS层的数据进行清洗、规范化(比如脏数据、规范不一致的、状态定义不一致的、命名不规范等问题),然后加工成基础明细表。
DWD层它本身应该是完整的、干净的、具有一致性的数据层。在DWD层会根据维度模型,设计事实表和维度表,也就是说DWD层是一个非常规范的、高质量的、可信的
数据明细层。
设计原则:
- 命名规范:DWD_业务域_主题域_表名_标记
- 数据粒度:根据业务需求,确定合适的数据粒度
- 数据标准化:统一数据命名、数据格式、数据单位等,便于管理
- 维度退化:使用维度模型作为理论基础,采用一些维度退化手法,将维度退化至事实表中,减少维度表与事实表的关联
- 数据质量:建立数据质量检测机制,定期监控数据质量,并及时处理数据质量问题,确保DWD层是高质量的
3.2.2 DWS层
DWS - 数据汇总层(Data Warehouse Summary),这一层的粒度比明细数据稍粗,基于DWD层上的基础数据进行轻度汇总
,汇总成分析某一个主题域的汇总事实表(一般是宽表)。DWS层应覆盖80%的应用场景,这样我们才能快速响应数据需求,否则的话,如果很多需求都要从ods开始做的话,那说明数仓建设是存在问题的
例如按照主题域划分,例如流量,订单,用户等,生成字段比较多的宽表,用于后续的业务查询,数据分析等。
设计原则:
- 命名规范:DWS_业务域_主题域_表名_标记
- 数据建模:以主题驱动的方式进行建模
- 宽表设计:采用更多的宽表化手段,比如涵盖更多的业务内容和字段,提升复用性,减少重复加工
- 维度退化:将维度退化至事实表中,减少维度表与事实表的关联
3.2.3 DIM层
DIM - 维表层(Dimension Layer),所以其实维度层就是大量维表构成的,为了统一管理这些维度表,就建设一个维度层,维度表也分为稳定维度维表,渐变维度维表等。
维度是指观察事物的角度
,提供某一业务过程事件涉及用什么过滤和分类的描述属性,"谁、什么时候、什么地点、为什么、如何" 干了什么,维度是维度建模的基础和灵魂。
比如,小张昨天晚上在天猫超市花费了10元钱购买了饼干
时间维度 --- 昨天晚上,地点维度 --- 天猫超市,商品维度 --- 饼干
所以可以看出,维度表包含了业务过程记录的业务过程度量的上下文和环境
。
3.3 ADS层
ADS - 应用数据层(Application Data Store),面向业务定制的应用数据,主要提供给数据产品和数据分析使用的数据,一般会放在ES,Mysql,Redis等系统供线上系统使用,也可以放在Hive中供数据分析和数据挖掘使用。
设计原则:
- 命名规范:ADS_业务域_主题域_表名_标记
- 根据业务需求选择合适的存储引擎,比如ES、MongoDB等
四、数仓分层的思考
数据仓库的分层设计 本质上是将复杂问题简单化,各个层级各司其职
,与软件项目开发中的分层思想较为相似,比如项目结构分为Controller、Service、Mapper层,Controller层对应ADS层,应对用户多变的需求,而Service层对应的是CDM层,粒度较粗,负责组装用户常用的数据,而Mapper层对应的是ODS层,粒度最细,对应最原始的数据。
其次数仓分层有利于建立完善的数据治理机制
,规范数据管理流程、数据标准和元数据管理,保证数据质量和数据安全,使企业能够更好地利用数据支撑决策和业务发展。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。