Data Warehouse Architecture Knowledge
数仓建模的意义
分层的意义
- 清晰数据结构:每一层都有各自的作用域
- 数据血缘关系追踪:快速定位数据问题
- 数据复用,减少重复开发:通过中间层极大减少重复计算,统一口径
- 复杂问题简化:每一层只做单一处理,且便于数据维护当口径调整仅需调整底层字段
- 屏蔽原始数据影响,屏蔽业务的影响:业务系统发生调整,不必改一次系统就需要重新接入数据
- 屏蔽源头业务系统的复杂性:源头系统可能极为复杂,通过
DW
来实现规范化 - 数据仓库的可维护性:分层使得某层的问题只需解决该层问题,不会影响到下层的代码和逻辑
数据仓库的ETL操作
ETL(Extraction-Transformation-Loading) 负责将分散的、异构数据源中的数据抽取到临时中间层后进行操作加载到目标仓库和数据集市中。
- 数据抽取:包括数据初始化装载和数据刷新,初始化装载即如何基于业务系统来构建维度表和事实表,并将数据装载在这些表中;数据刷新即设定定时任务来监听和触发源数据的变动从而对相应的数据表进行更新维护
- 数据清洗:针对源系统数据库中出现的重复、不完整、违反业务逻辑等问题数据进行统一处理
- 数据转换:主要是将数据清洗后的数据转换成数仓所需的数据:规范统一字段命名提供统一的数据字典和格式
- 数据加载:将处理完后的数据导入对应存储空间中
步骤 | 组件 | 功能描述 |
---|---|---|
数据抽取 | Flume | 收集、聚合和移动大量日志数据。 |
Sqoop | 在Hadoop和关系型数据库之间传输数据。 | |
数据清洗 | Hive | 提供SQL-like查询语言,进行数据清洗和转换。 |
Pig | 提供类似SQL的语言(Pig Latin),编写复杂的ETL流程。 | |
数据转换 | Spark | 高效地进行数据转换。 |
MapReduce | 批处理数据转换任务。 | |
数据加载 | HDFS | 存储处理后的数据。 |
HBase | 对于需要实时访问的数据,使用HBase进行存储。 | |
任务调度 | Oozie | 流程编排和工作流管理,支持Flume、Sqoop、Hive、Pig、Spark等任务调度。 |
Apache Airflow | 强大的工作流管理平台,支持复杂的工作流编排和监控。 |
分层的误区
数仓的划分不是为了分层而分层,更多是为了解决ETL任务及工作流的组织、数据的流向、读取权限的控制。
通常基础分层为三层 ODS-DW-AD
其中DW
可根据公司业务需求进行细分为 DWD
DWT
DWS
DIM
DM
技术架构
数据中台包含的内容:
- 系统架构:以Hadoop、Spark等组件为中心的架构体系
- 数据架构:顶层设计、主题域划分、分层设计
- 数据建模:维度建模,业务过程-确定粒度-维度-事实表
- 数据管理:资产管理,元数据管理、质量管理、主数据管理、数据标准、数据安全管理
- 辅助系统:调度系统、ETL系统、监控系统
- 数据服务:数据门户、机器学习数据挖掘、可视化系统、数据交换分享下载
数据分层架构
一些架构:
贴源层(ODS, Operational Data Store)
数据引入层又称数据基础层,将原始数据几乎无处理存放在该层,结构与源系统保持一致,是准备区,主要职责是将基础数据同步和存储。
一般来说ODS
和源系统数据是同构的,主要是简化后续数据加工处理工作。从数据粒度上来说是最细的。对于历史数据的存留一般保存3-6个月后需要清楚,以节省空间。根据不同的需要采取不同生命周期管理措施。
注意:这一层除数据接入,还会考虑一定的数据清洗,比如异常字段处理、字段命名规范花、时间字段的统一。
数据分区:按照时间进行分区,维度表按照快照时间、事实表按照业务时间
数据处理:对于离线数据,每日定时任务跑批,通过
Sqoop
来进行数据抽取;对于实时数据一般利用Spark streaming,Flink 来进行处理入库数据存储策略:
1) 增量存储
2) 全量存储
3) 拉链存储
Hive外部表:存放数据的文件可以不是在hive的hdfs默认的位置,并且hive对应的表删除时相应的数据文件并不会删除,可以防止误删除而将数据删除。
数仓层(DW, data warehouse)
数据仓库层时核心层,将从ODS
层中的数据按照主题建立数据模型,每一个数据模型对应一个宏观分析的领域,DW层会保存永久的存量的数据。
DW层存放明细事实数据,维表数据以及公共指标汇总数据。其中,明细事实数据、维表数据一般根据ODS层数据加工生成。公共指标数据汇总一般根据维表数据和明细事实数据加工生成。
DW层又可以细分维度层DIM
,明细数据层DWD
汇总数据层 DWS
,采用维度建模方法作为理论基础,可以定义为度模型主键与事实模型中外键关系,减少数据冗余,提高明细数据表的易用性。在汇总数据层同样可以关联复用统计粒度中的为度,采取更多的宽表化手段来构建公共指标数据层,提升指标复用性。
维度层(DIM,Dimension):以维度作为建模驱动,基于每个维度的业务含义,通过添加维度属性,关联维度等。为了避免在维度模型中冗余关联维度的属性,基于雪花模型构建维度表。
明细数据层(DWD,Data Warehouse Detail):以业务过程作为建模驱动,基于每个具体业务过程特点,构建最细粒度的明细事实表。可将某些重要属性字段适当冗余,也即宽表化处理。
汇总数据层(DWD,Data Warehouse Summary):以分析的主题对象作为建模驱动,基于上层的应用和产品的指标需求,构建公共粒度的汇总指标表。以宽表化手段物理化模型,构建统一命名规范、口径统一的统计指标,为上层提供公共指标,建立汇总宽表、明细事实表。
主题域:面向业务过程,将业务活动事件进行抽象集合。针对DWD层
数据域:面向业务分析,将业务过程或者维度进行抽象集合。针对DWS层
DWD 层是以业务过程为驱动;DWS是以需求为驱动。
- 公共维度层(DIM)
由维表构成。维度是逻辑概念,是衡量和观察业务的角度。维表是根据维度及其物理属性来物理化的表,采用宽表设计原则。因此,构建公共维度汇总层首先要定义维度。他贯穿整个DW层
高基数维度数据:用户信息、商品信息,数量级为千万或者上亿级别。
低基数维度数据:一般是配置表,如日期维表。
维表设计:
避免过于频繁的更新维表的数据:缓慢变化维-拉链表
维度建模步骤:
维度建模是数据仓库设计中的核心方法之一,它通过将业务数据组织为事实表和维度表来支持高效的查询和分析。常见的维度建模方式有星型模型(Star Schema)和雪花模型(Snowflake Schema)
1)确定业务过程
2)选择与业务事实相关的主维度
3)识别主维度中可以进一步拆分的子维度
关于主题:
数据仓库都是面向主题组织的,主题在一个较高层次上将企业信息数据进行综合、归类和分析利用。每一个主题对应一个宏观的分析领域。
- 数据明细层(DWD,Data Warehouse detail)
DWD是业务层与数据仓库的隔离层, 这⼀层主要解决⼀些数据质量问题和数据的完整度问题。
明细表用于存储ODS层原始表转换过来的明细数据,DWD层的数据是经过清洗、规范、维度退化后的数据。
明细粒度事实层(DWD):以业务过程作为建模驱动,基于每个具体的业务过程特点,构建最细粒度的明细层事实表。可以结合企业的数据使⽤特点,将明细事实表的某些重要维度属性字段做适当冗余,即宽表化处理。明细粒度事实层的表通常也被称为逻辑事实表。
维度退化:对于一些特殊维度如订单ID无法在仓库中找出与其相关联的其他内容则可对他进行维度退化将该维度退化至事实表中。
DWD层做了哪些事:
数据清洗过滤-数据映射转换-数据规范-维度退化-日期规范化
明细表设计原则:
一个明细粒度事实表仅和一个维度关联。
尽可能包含所有与业务过程相关的事实。
只选择与业务过程相关的事实。
解不可加性事实为可加的组件。
在选择维度和事实之前必须先声明粒度。
在同一个事实表中不能有多种不同粒度的事实。
事实的单位要保持一致。粒度
谨慎处理Null值。
使用退化维度提高事实表的易用性。
- 数据汇总层(DWS,Data Warehouse Summary)
基于DWD层的明细数据,可以按照一些场景、分析实体去组织数据,构成一些分主题的汇总层数据层DWS
明细粒度 ====》汇总粒度
DWS层(数据汇总层)宽表,面向主题汇总,维度相对来说比较少,DWS根据DWD层的基础数据按照各个维度ID进行粗粒度汇总聚合,如按照交易来源、交易类型汇总。整合汇总成分析某一个主题域的服务数据,一般是宽表。
宽表建模 (Wide Table Modeling),也称为扁平化建模或反规范化建模,是一种数据建模技术,旨在通过将多个相关表中的数据合并到一个单一的、宽大的表中来简化数据查询和分析。 这个宽表通常包含大量列,其中每一列代表来自不同源表中的一个属性。
以DWD为基础,按天轻度汇总。统计各个主题对象的当天行为,(例如,购买行为,统计商品复购率)
该层数据表会相对比较少,基本都是宽表(一张表会涵盖比较多的业务内容,表中的字段比较多)按照主题划分,如订单、用户等,用于后续的业务查询,OLAP分析,数据分发等。
DWS层做了哪些:
DWS将DWD层的数据按照主题进行汇总,每个主题构建1-3张宽表:按照主题建模、维度建模
1)DWS层每个主题1-3张宽表(处理100-200个指标覆盖70%以上的需求)
2)最大的宽表:用户行为宽表。大概60-200个字段
3)行为宽表包括的指标:评论、打赏、收藏、关注、分享
4)分析过的指标:日活、月活、新增、留存、转化率、流失、活跃
- 数据应用层(ADS,Application Data Store)
ADS存放数据产品个性化的统计指标数据,报表数据。主要是提供给数据产品和数据分析使用的数据,通常根据业务需求划分成流量、订单、用户等,生成字段较多的宽表,用于提供后续的业务查询主要目的是满足用户分析的需求。所以数据存储的一般是近几年,但在数据广度上来说覆盖了所有的业务数据。
业务⽅或者部⻔基于DWD和DWS建⽴的数据集市(Data Market, DM),⼀般来说应⽤层的数据来源于DW层,⽽且相对于DW层,应⽤层只包含部⻔或者业务⽅⾯⾃⼰关⼼的明细层和汇总层的数据。