数据仓库知识点总结(数仓分层建模、维度建模等)

本文档总结了数据仓库的相关知识点,包括数仓分层理论、数据仓库建模方法论(如ER模型、维度建模)、维度建模方法论及案例,以及数据治理的多个方面,如元数据管理、数据质量管理、数据标准和数据资产管理。同时,讨论了数据湖与数据中台的区别,提供了SQL案例,并涵盖了其他如Hive中处理缓慢变化维的挑战。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据仓库知识点总结

1.数据仓库分层理论

1.1数仓分层架构的好处

  • 1.清晰的数据结构:

​ 每一个数据分层都有对应的作用域,在使用数据的时候能更方便的定位和理解(易定位与理解

  • 2.数据血缘追踪

​ 当提供给业务系统或下游系统的数据服务中的数据异常时,清晰的血缘关系可以快速的定位问题所在,血缘管理也是元数据管理重要的部分。数据血缘关系管理

  • 3.减少重复开发

​ 遵循数据加工原则,下层包含了上层数据加工所需要的全量数据,避免重复造轮子

  • 4.数据关系条理化

​ 源系统之间存在着复杂的数据关系,例如当客户信息同时存在于多个系统时,数仓会把相同主题的数据进行统一建模,从而将复杂的数据关系变为清晰的数据模型。或者采用主数据管理系统对客户信息进行统一管理,抽象为一致性客户维度数据一致性

  • 5.屏蔽原始数据影响

数据逐层加工原则,使得原始数据离应用层还有多层的数据加工,原始数据出问题,因为存在多个层级,也可以保持应用层的稳定性。

1.2 数据仓库核心分层

​ 数仓分层方式,各有不同,但可以提炼出一下共性:

  • 1)源系统归集到数仓的缓冲层,或为贴源层

  • 2)具备数据标准化及合并全量数据的标准层

  • 3)具备主题划分及明细数据整合的主题层

  • 4)具备提供数据服务给下游系统使用的集市层,或称为应用层

    数据仓库的核心分层为ODM贴源层、SDM标准层、FDM主题层、ADM应用层

在这里插入图片描述

ODM

​ 如何在ODM层保证数据正常入库:

  • 1)数据入库的全流程校验机制(重要

    ​ 进行数据抽取时,将落地的文本数据与源系统抽取记录数进行比对,即可完成数据抽取的完整性校验。数据入库时,把入库的记录数与文本数据的记录进行匹配,既可完成数据入库的完整性校验。

  • 2)使用元数据管理工具

    ​ 定时同步源系统的数据结构到数仓进行比对,当发现差异及时预警。

  • 3)处理好映射关系

    ​ 将输入抽取及数据入库的处理流程固化,未来源系统出现新增活着吧变更需求时。处理好映射关系,无需重复开发处理流程。

  • 4)建设预警机制

    ​ 短信预警通知

  • 数仓设计

  • 数据资产

  • 数据质量

  • 指标系统

  • 数据地图

2.数据仓库建模方法论

2.1 ER模型

数据仓库之父Bill lnmon提出,在范式理论上符合3NF。具有以下几个特点:

  • 全面了解企业业务和数据
  • 实施周期非常长
  • 对建模人员能力要求非常高

2.2 维度模型

由Ralph Kimball提出,他的书:《数据仓库工具箱》是数据仓库建模的经典书籍 。维度建模从分析决策的需求出发构建模型,为分析需求服务。主要分为以下步骤:

  • 选择业务过程
  • 选择粒度,预判需要细分的程度
  • 确定维度,选择好粒度之后,需要基于此粒度设计维表,包括维度属性,用于分析时进行分组和筛选
  • 选择事实,确定分析需要衡量的指标

2.3 Data Vault模型

待补充

2.4 Anchor 模型

待补充

3.维度建模方法论

在不成熟、快速变化的业务面前,构建ER模型的风险非常大,不太适合去构建ER模型。所以在数据仓库的建设过程中,建议以Kimball的维度建模为核心理念去建设。

数据模型的维度设计主要以维度建模理论为基础,基于维度数据模型总线架构,构建一致性的维度和事实

3.1模型层次(数仓的分层理论)

数仓主要分为三层

  • 操作数据层(ODS)

    将操作系统数据几乎无处理地存放在数据仓库系统中

  • 公共维度模型层(CDM)

    明细数据层:DWD

    汇总数据层:DWS,

    采用维度退化,将维度退化到事实表中,减少事实表和维表的关联,提高明细数据表的易用性;同时在汇总数据层,加强指标的维度退化,采用更多的宽表化手段构建公共指标数据层,提升公共指标的复用性,减少重复加工

  • 应用数据层(ADS)

3.2 模型实施过程

构建维度模型的四个阶段

  • 高层模型设计
  • 详细模型设计
  • 模型审查、再设计和验证
  • 详细设计文档,ETL设计和开发

3.2 维度设计

度量称为**“事实”,将环境描述为“维度”**。维度的作用一般是查询约束、分类汇总以及排序

作为维度建模的核心,在企业级数仓中必须保证维度的一致性

维度的基本设计方法:

  • Step1:选择维度或者新建维度,
  • Step2:确定主维表
  • Step3:确定相关维表、
  • Step4:确定维度属性

对于维度表的属性具有层次结构的情况,一般有两种处理方式:

规范化与反规范化

  • 规范化:

    雪花模型,采用雪花模型,除了可以节约一部分存储空间外,对于OLAP系统来说,没有其他效用。出于易用性和性能的考虑,维度一般不做规范化处理。用空间换时间。

  • 反规范化:

    将维度的属性层次合并到单个维度中的操作称为反规范化,例如:星型模型

OLAP系统的主要目的是如何方便用户进行统计分析,若采用雪花模型,则用户在统计分析过程中需要大量的关联操作,使用复杂度高,同时查询性能也很差,这时候就需要采用反规范化处理,方便易用。

依据维度设计的原则,尽可能丰富维度属性,同时进行反规范化处理。

维度表的水平整合与垂直整合

既然有了整合也会有拆分

维度表的水平拆分与垂直拆分

  • 依据维度的不同分类的属性差异情况
  • 依据业务关联程度,关联性较低的维度没有必要放在一起

缓慢变化维应对维度的变化

在Kimball维度建模理论中,必须使用代理键作为每个维度表的主键,用于处理缓慢变化维。

  • 但是在分布式计算系统里,不存在事务概念,对于每个表的记录生成稳定的全局唯一的代理键难度很大。
  • 使用代理键会大大增加ETL的复杂性,对ETL任务的开发和维护成本很高

不使用代理键如何处理缓慢变化维的问题呢?

可以采用快照的方式,每天保留一份全量快照数据。按日做分区。

优点:

- 简单,有效,开发维护成本低
- 使用方便,理解性好

缺点:

  • 存储极大的浪费,需要有对应的数据生命周期制度,清楚无用的历史数据

微型维度

枚举值

维度的层次

  • 均衡层次结构

    层次固定,例如地理信息

  • 非均衡层次结构

    层次不固定

层次结构扁平化

层次桥接表
不建议使用桥接表,很多时候,简单。直接的技术方案往往是最好的解决方案

行为维度

多值维度

多值属性:属性字段值/多表/联合主键

杂项维度

3.3 事实表设计

度量:

  • 可加

    与事实表关联的任意维度都可以进行汇总

  • 半可加

    只能按照部分维度汇总,不能对所有维度汇总。例如,库存可以按照商品和地点进行汇总,但是不能按照时间维度汇总

  • 不可加

    度量完全不具备可加性。例如比率型事实

事实表类型:

  • 事务事实表

    也称为原子事实表,用来描述业务过程

  • 周期快照事实表

    以时间间隔来记录事实,例如每天,每月,每年等

  • 累积快照事实表

    表示过程开始和结束之间的关键时间点,随着生命周期的不断变化,记录也会随着过程的变化而被修改。

事实表设计原则

  • 1.将不可加的事实分解,例如订单的优惠率,可以分解为订单原价金额和订单优惠金额两个事实
  • 2.在选择维度和事实之前必须声明粒度
  • 3.在同一个事实表中的粒度必须相同
  • 4.事实的单位要一致
  • 5.对事实的NULL值要处理
  • 6.使用退化维度提高事实的易用性

事实表设计方法

  • 选择业务过程及确定事实表类型

  • 声明粒度

    最细粒度

  • 确定维度

  • 确定事实

  • 冗余维度

在淘宝订单付款事务事实表中,通常会冗余大量维度字段,以及商品类目,卖家店铺信息等维度信息

单事务事实表,即针对每个业务过程设计一个事实表

多事务事实表,将不同的事实放入到同一个事实中,即同一个事实表包含不同的业务过程。

聚集型事实表

  • 一致性
  • 避免单一表设计
  • 聚集粒度可不同

4 数仓模型

4.1 数仓模型需要关注以下5点:

  • One Data:

​ 数仓所有的数据只加工一次。对于维度:要保证维度一致性;对于明细层数据:保证相同粒度的度量只加工一次;对于汇总层的数据:相同粒度的指标只存一份,避免重复建设。

  • OneIndex:

​ 数仓指标具有唯一性,通过原子指标+派生指标来规范所有的指标系统,避免数据不一致的问题。

  • OneService:

​ 数据服务划清了数据和应用的边界,应用通过数据服务,直接获取计算结果,强制把公共计算逻辑下沉到数据层面,提高数据共享能力,避免通过不同层次获取数据导致的数据准确性和安全性问题。

  • OneLine

​ 最大程度保障数据流转的透明性,不同层级做不同层级的数据处理逻辑,不可逆向依赖,方便后续数据血缘关系、数据地图建立,避免数据杂乱,无法溯源。

  • OneEntity

​ 主要是模型方面的建设,同一个用户,在同一个模型中,可能存在重复的记录,如何识别两个ID是同一个用户,做到所有用户只有唯一的ID标识。

4.2 缓慢变化维与拉链表

说到缓慢变化维,就需要说明一下什么是维度。维度与事实是在Kimball《维度建模权威指南》里定义的,维度指的是上下文,而事实指的是度量。请见下图:

在这里插入图片描述

而拉链表则是针对数据仓库中表存储数据的方式而定义的,目的是为了记录历史数据的每个状态,记录一个事务从开始,一直到当前状态的所有变化信息。

因此,两者不能混为一谈。

拉链表的使用场景

  • 1.数据量比较大
  • 2.表中的部分字段会被更新
  • 3.需要查看某一个时间点或时间段的历史快照信息,查看某一个订单在历史某一个时间节点的状态

例子:

有一张订单表,6月20号有3条记录:

订单创建日期 订单编号 订单状态
2012-06-20 001 创建订单
2012-06-20 002 创建订单
2012-06-20 003 支付完成

到6月21号,表中有5条记录:

订单创建日期 订单编号 订单状态
2012-06-20 001 支付完成(从创建到支付)
2012-06-20 002 创建订单
2012-06-20 003 支付完成
2012-06-21 004 创建订单
2012-06-21 005 创建订单

到6月22号,表中有6条记录:

订单创建日期 订单编号 订单状态
2012-06-20 001 支付完成(从创建到支付)
2012-06-20 002 创建订单
2012-06-20 003 已发货(从支付到发货)
2012-06-21 004 创建订单
2012-06-21 005 支付完成(从创建到支付)
2012-06-22 006 创建订单

如果不使用拉链表,则

  • 1.只保留一份全量表,无法查看历史记录
  • 2.每天一份全量,则造成数据冗余,存储空间浪费
  • 3.设计成历史拉链表保存该表,则如下:
订单创建日期 订单编号 订单状态 dw_begin_date dw_end_date
2012-06-20 001 创建订单 2012-06-20 2012-06-20
2012-06-20 001 支付完成 2012-06-21 9999-12-31
2012-06-20 002 创建订单 2012-06-20 9999-12-31
2012-06-20 003 支付完成 2012-06-20 2012-06-21
2012-06-20 003 已发货 2012-06-22 9999-12-31
2012-06-21 004 创建订单 2012-06-21 9999-12-31
2012-06-21 005 创建订单 2012-06-21 2012-06-21
2012-06-21 005 支付完成 2012-06-22 9999-12-31
2012-06-22 006 创建订单 2012-06-22 9999-12-31

说明:

  • dw_begin_date表示该条记录的生命周期开始时间
  • dw_end_date表示该条记录的生命周期结束时间
  • dw_end_date=‘9999-12-31’ 表示该条记录目前处于有效状态
  • 如果查询当前所有有效的记录,则select * from order_history where dw_end_date=‘9999-12-31’
  • 如果查询2012-06-21的历史快照,则select * from order_history where dw_begin_date<=‘2012-06-21’ and dw_end_date>=‘2012-06-21’,这条语句会查询到以下记录:
订单创建日期 订单编号 订单状态 dw_begin_date dw_end_date
2012-06-20 001 支付完成 2012-06-21 9999-12-31
2012-06-20 002 创建订单 2012-06-20 9999-12-31
2012-06-20 003 支付完成 2012-06-20 2012-06-21
2012-06-21 004 创建订单 2012-06-21 9999-12-31
2012-06-21 005 创建订单 2012-06-21 2012-06-21

和源表在6月21号的记录完全一致:

订单创建日期 订单编号 订单状态
2012-06-20 001 支付完成(从创建到支付)
2012-06-20 002 创建订单
2012-06-20 003 支付完成
2012-06-21 004 创建订单
2012-06-21 005 创建订单

由此,拉链表即能满足对历史数据的需求,又能很大程度的节省存储资源。

Kimbal缓慢变化维一共有8种,但是只有三种被广泛使用

  • 类型1 重写

    与业务数据保持一致,直接update为最新的数据。缺点是无法保留历史痕迹。

  • 类型2 增加新行

    更新历史数据时间戳,新增行记录新值。

    • 自然键第一次出现时

      新增一行数据,created为业务系统的创建时间,updated为9999-12-31

    • 类型2的维度发生变化时

      将自然键当前记录的updated由9999-12-31刷新为最新时间

      新增一行记录,记录最新数据,created为最新时间,updated为9999-12-31

  • 类型3 增加新列

下面是不常用的几种类型

  • 类型0 不做任何变化

  • 类型4 微型维度

  • 类型5 类型1+微型维度

    增加当前微型维度主键,做为主维度的一个属性。从而避免主维度表行的爆炸性增长

  • 类型6 类型1+类型2+类型3

  • 类型7 双类型1+类型2

SCD类型 维度表行动 对事实分析影响
类型0 属性值无变化 事实与原始值相关联
类型1 重写属性值 事实与当前值相关联
类型2 为新属性值增加新行 事实与发生时的有效值关联
类型3 增加新列来存储当前和原先值 事实与当前和先前值关联
  • 拉链表的实现流程

根据业务主键找出去重后的全量数据,判断业务主键是否存在于全量数据表。如果不存在,则找出新增记录,为新增记录分配代理键,并标记为当前记录 ,将数据插入维度表。如果存在,则列出维度变化类型。

判断维度表的业务主键是否存在于全量数据表

在这里插入图片描述

4.3 星型模型与雪花模型

雪花模型,在星型模型的基础上,维表上关联了其他维表。这种模型维护成本比较高,性能方面比较差,尤其是基于Hadoop体系构建数仓,减少Join就是减少Shuffle,性能差距会很大

4.4.数据中台总体设计方案

  • 粒度性
  • 模型易用性
  • 模型的一致性
  • 中性与共享性
  • 历史性

明细数据与汇总数据

汇总数据区DWS

轻度汇总区信息,支持数据集市的数据需求。避免DM模型频繁从基础层取数,汇总,需要对DW基础表所存储的详细数据做进一步加工统计。多表连接合并,求和、平均值等。

轻度汇总数据采用逆范式宽表设计,采用维度建模的方法。尽可能包含更多的属性(维度)和指标。

建设多维集市考虑使用多维数据库(Multi Dimensional DataBase,MDD)

ETL模型分为两种

  • 同步架构

  • 异步架构

ETL加载方式:

  • 完全刷新

  • 镜像增量

  • 事件增量

  • 镜像比较

变化数据获取(Changing data capture)。变化数据获取有时间戳、快照。触发器和日志四种。

大体可以分为两类:

  • 侵入式的

    侵入式的CDC操作会给源系统带来性能的影响。基于时间戳的CDC、基于触发器的CDC、基于快照的CDC是侵入性的。

  • 非侵入式

    基于日志的CDC是非侵入性的。例如Oracle Golden Gate(OGG)。

5.数据治理

  • 数据标准

    制定业务标准、技术标准、安全标准、资源管理标准,从而保障数据生产、管理、使用合规。

  • 数据架构

    提升模型灵活性,保障数据一致性,消除跨层引用和模型冗余等问题。

  • 数据安全

    加强敏感数据和数据共享环节的安全治理

  • 元数据建设

    打通从数据采集到构建再到应用的整条链路,并为数据使用人员提供数据地图、数据可视化等元数据应用产品,解决了“找数”,“取数”,“元数据变动影响评估”等难题。

5.1 数据模型
5.2 数据质量
5.3 数据治理
  • 数据治理工作,一定要先摸清楚数据的家底,规划好路线图,切记一上来就搭平台。

  • 数据治理即是技术部门的事,也是业务部门的事,一定要建立多方共同参与的组织架构和制度流程,数据治理的工作才能真正落实到人,不至于浮在表面。

  • 数据治理不要贪图大而全,要从核心系统,重要的数据开始做起

    二八原则:8成的数据业务,其实是靠2成的数据在支撑;8成的数据质量问题,其实是由2成的系统和人产生的。在数据治理过程中,如果能找出这2成的数据和这2成的系统和人,将会起到事半功倍的效果。
    在这里插入图片描述

  • 不要过度迷恋与工具,组织架构,制度流程、现场的实施和运维也非常重要。数据治理是对人的行为的治理

  • 数据标注难落地是数据治理中的普遍性问题,实施过程中要区分遗留系统和新建系统,分别来执行不同的落地策略

  • 数据质量问题的解决,要形成每一个环节都有确定责任人的闭环机制和反馈机制

  • 数据治理工作,一定从需求开始,想办法让客户直观地看到成果

5.3.1 数据治理之元数据管理

一、元数据的定义

  • 元数据(Meta Data)是描述数据的数据

    例如,要想描述清楚一个实际的数据,以某张表为例,需要知道表名、表别名、表的所有者、数据存储的物理位置、主键、索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值