前言
这篇笔记的主要内容来至于The Data Warehouse Toolkit,该书可以称为数仓建模的圣经
什么是星型模型
以一个业务事实为主表。比如一笔订单就是一个业务事实。订单有商品的SKU信息,销售市场信息,日期信息 ,这些基本属性,叫做维度。
雪花
一个产品维度,本身还有分类、包装等信息,也独立做成表,围绕在事实表身边,就像一片雪花。
为什么要用星型模型
- OLTP针对的是线上事务,写多的场景,所以粒度要细。数仓模型的应用场景是数据分析,涉及大量查询,所以要少关联,多整合
- 降低业务理解难度和复杂性,有些业务事实,跨了很多表,甚至跨了很多库,比如一个订单的生命周期,牵扯订单团队、仓储团队、物流团队。如果不建模,则需要所有使用数据的人员明白对应的业务细节,表的数据结构
三种模型类型
总结来看,事实表分为三种类型。
- 事务事实表,比如一次商品销售记录
- 周期快照表。按一定时间周期记录业务实体快照。比如记录每天的促销商品销售情况
- 累计快照表,记录业务实体一些列业务流程变更的事实表
数仓的数据模型,为了应对不同的OLAP场景,往往三者皆有之。他们三者之间的区别如下
累计事实模型
有些业务实体,会发生一系列的业务流程变更,在事实表中,使用一条记录,记录该业务实体各关键流程的所有信息,并随各业务事件的发生来更新这条记录,也就是一条记录会累计各种变化,叫做累计快照表。比如一个商品进入仓库的的整个流程可能有,收货,验货,装箱,运输等。其模型设计示例如下:
一行数据的变更示例如下:
累计快照事实表要保证流程节点个数确定有限。动态任意多个流程,不适合做成累计快照事实表,因为变化太频繁。
一个模型怎么定义
- 选定业务事实 ,一条事实一定能回答谁、何时、何地、做了什么事,为什么要这么做,怎么做的?(who, when, where, what, why, and how)
- 定义数据粒度,事实表的粒度一定要细,才能灵活承载更上层的各种逻辑口径的指标计算。
- 标识维度表
- 标识事实表
如何响应维度表的变化
维度表相对比较稳定,但也不是完全不会变化。比如用户的信息维度表,就可以变更用户的年龄,地址等