数据模型是数仓的核心。
数据模型决定数仓的续航。
数据模型的设计应该预测未来业务的发展。
主要讨论维度建模方式。
数据模型
1. 基本概念
维度建模是数据仓库大师Ralph Kimball提出的,同时也是数据仓库工程领域最流行的数仓建模经典。
维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。
它是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。
1.1 事实表
事实表产生于业务过程,存储了业务活动或事件提炼出来的性能度量。从最低的粒度级别来看,事实表行对应一个度量事件。
事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表。
-
事务事实表
用于承载事务数据,通常粒度比较低,它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表,例如产品交易事务事实、ATM交易事务事实。 -
周期快照事实表
按照一定的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充。用来记录有规律的、固定时间间隔的业务累计数据,通常粒度比较高,例如账户月平均余额事实表。 -
累计快照事实表
用来记录具有时间跨度的业务处理过程的整个过程的信息,每个生命周期一行,通常这类事实表比较少见。
注意:这里需要值得注意的是,在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。
1.2 维度表
维度表是维度建模的核心,他基于一致性维度的架构,他指业务过程的发生或分析角度。同时维度表有两种特殊的维度–退化维度与缓慢变化维度。
-
退化维度
一些维度直接退化进事实表中,一般用于分组分析时使用。
这种退化维度一般都是事务的编号,如订单编号、发票编号等。这类编号需要保存到事实表中,但是不需要对应的维度表,所以称为退化维度。
看起来像是事实表的一个维度关键字,但实际上并没有对应的维度表。 -
缓慢变化维度
维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维。
推荐使用拉链表的方式解决。
1.3 建模流程
建模分为四步:
- 选择业务过程
- 声明粒度
- 确认粒度
- 确认事实
可以看我这一篇文章:数据仓库建模流程
2. 建模方式
2.1 维度建模(主要讨论)
企业中最流行、也是最经典的数仓建模经典。
-
星型模型
星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。
-
星座模型
星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。数仓模型建设后期,大部分维度建模都是星座模型。
-
雪花模型
雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面也较差,所以一般不建议使用。
2.2 范式建模
即 实体关系(ER)模型,数据仓库之父Immon提出的,从全企业的高度设计一个3NF模型,用实体加关系描述的数据模型描述企业业务架构,在范式理论上符合3NF。此建模方法,对建模人员的能力要求非常高。
2.3 Data Vault模型
DataVault由Hub(关键核心业务实体)、Link(关系)、Satellite(实体属性) 三部分组成 ,是Dan Linstedt发起创建的一种模型方法论,它是在ER关系模型上的衍生,同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。
2.4 Anchor模型
高度可扩展的模型,所有的扩展只是添加而不是修改,因此它将模型规范到6NF,基本变成了K-V结构模型。企业很少使用。
3. 建模工具
- PowerDesigner
- ERWin
- Visio
- Excel Mapping