第11章 事实表设计
1.事实表基础
- 事实表特性
事实表作为数据仓库维度建模的核心,紧紧围绕着业务过程来设计。
事实表中一条记录所表达的业务细节程度被称为粒度。两种方式表达:
① 维度属性组合所表示的细节程度。
② 所表示的具体业务含义。
作为度量业务过程的事实,一般为整形或者浮点型,有三种类型:
① 可加性。按照与事实表关联的任意维度进行汇总
② 半可加性。按照特定维度
③ 不可加性。比如汇率型事实
事实表三种类型: 事务事实表、周期快照事实表、累积快照表
① 事务事实表:类似于mysql binlog日志,每一次相关的 change 都记录下来,生成一行新的数据
② 周期快照事实表:只看某个业务过程,比如订单收货,数据按订单收货时间来切分,周期可以为每天、每月等。
③ 累积快照事实表:要看整个生命周期的多个业务过程,描述过程开始和结束之间的关键性步骤事件,覆盖整个生命周期,比如:创建订单 → 买家付款 → 卖家发货 → 买家确认收货。粒度是一个订单一行数据,创建订单时间,付款时间,发货时间,收货时间,分别作为一个字段,便于计算不同业务过程的时间间隔
- 事实表的设计原则
(1)尽可能包含所有业务过程相关的事实
(2)只选择与业务过程相关的事实
(3)分解不可加性事实为可加的组件
(4)在选择维度和事实之前必须先声明粒度
(5)在同一个事实表中不能有多种不同粒度的事实
(6)事实的单位要保持一致
(7)对事实的null值要进行处理
(8)使用退化维度提高事实表的易用性
- 事实表设计方法
(1)选择业务过程及确定事实表类型
(2)声明粒度
(3)确定维度
(4)确定事实
(5)冗余维度
2.三种事实表
- 事务事实表
任何类型的事件都可以被理解为 种事务。比如交易过程中的创订单、买家付款,物流过程中的揽货、发货、签收,退款中的申请退款、申请小 介入等,都可以被理解为 种事务。事务事实表, 即针对这些过程构建的一类事实表,用以跟踪定义业务过程的个体行为,提供丰富的分析能力,作为数据仓库原子的明细数据。
(1)设计过程
① 选择业务过程
② 确定粒度
③ 确定维度
④ 确定事实
⑤ 冗余维度
(2)两种事务事实表
单事务事实表
针对每个业务过程设计一个事实表,可以方便地对每个业务过程进行独立的分析研究。
多事务事实表
将不同的事实放到同一个事实表中,即同一个事实表包含不同的业务过程。
两种方法进行事务的处理:
① 不同业务过程的事实使用不同的事实字段存放。如淘宝交易事务事实表
② 不同业务过的事实采用同一个事实字段进行存放,但是增加一个业务过程标签。
实际应用中根据需要选择:
① 当不同业务过程的度量比较相似,差异不大时,可以采用第二种多事务事实表的设计方式,但是在同一周期内会存在多条记录。
② 差异较大时,可以选择第一种将不同业务过程的度量使用不同字段冗余到表中。但是度量字段零值多。
(3)两种事务事实表对比
单事务事实表 | 多事务事实表 | |
---|---|---|
业务过程 | 一个 | 多个 |
粒度 | 相互间不相关 | 相同粒度 |
维度 | 相互间不相关 | 一致 |
事实 | 只取当前业务过程中的事实 | 保留多个业务过程中的事实,非当前业务过程的事实需要置零处理 |
冗余维度 | 多个冗余过程,则需要冗余多次 | 不同业务过程只需要冗余一次 |
理解程度 | 易于理解,不会混淆 | 难以理解,需要通过标签来限定 |
计算存储成本 | 较多,每个业务过程都需要计算存储一次 | 较少,不同业务过程融合到一起,降低了存储计算量,但当前非业务过程的度量存在大量零值 |
- 周期快照事实表
(1)设计过程
① 确定快照事实表的快照粒度
② 确定快照事实表采样的状态度量
(2)特性
快照事实表的设计有一些区别于事务事实表设计的性质。事务事实表的粒度能以多种方式表达,但快照事实表的粒度通常以维度形式声明;事务事实表是稀疏的,但快照事实表是稠密的;事务事实表中的事实是完全可加的,但快照模型将至少包含一个用来展示半可加性质的事实。
① 用快照采样状态。以预定的间隔采样状态度量,这种间隔联合一个或多个维度,将被用来定义粒度,每行都将包含记录所涉及状态的事实。
② 快照粒度。快照需要采样的周期以及什么将被采样。快照周期可以按天、月、季度来统计。
③ 密度与稀疏度(重要特征)。快照事务表和事实事务表的关键区别。事务事实表是稀疏的,只有当天发生的业务过程,事实表才会记录该业务过程的事实;而快照事实表是稠密的,无论当天是否有业务过程发生,都会记录一行
④ 半可加性。在快照事实表中收集到的状态度量都是半可加的。与事务事实表的可加性事实不同,半可加性事实不能根据时间维度获得有意义的汇总结果。
(3)注意事项
① 事务与快照成对设计
② 附加事实
③ 周期到日期度量
- 累积快照事实表
(1)设计过程
① 选择业务过程
② 确定粒度
③ 确定维度
④ 确定事实
⑤ 退化维度
(2)特点
① 数据不断更新
② 多业务过程日期
(3)特殊处理
① 非线性过程
② 多源过程
③ 业务过程取舍
(4)物理实现
① 全量表的形式,以日期分区。 每天分区存储昨天的全量数据和今天的增量数据合并的结果。适用于全量数据比较少的情况。
② 全量表的变化形式。主要针对事实表数据量很大的情况,预测较短生命周期的业务实体从产生到消亡的时间间隔。比如设计最近200天的交易订单累计快照事实表,每天的分区存储最近200天的交易订单,200天前的存储在归档表中。
③ 以业务实体的结束时间分区。每天的分区存放当天结束的数据,设计一个时间非常大的分区(9999-12-31)存放截止至今未结束的数。可能存在极特殊情况,业务系统无法标识业务实体的结束时间,比如物流订单),依赖其他公司的数据,且是批量回传无法保证准确率。解决方法一:使用相关业务系统的业务实体的结束标志作为此系统的结束标志,如订单结束了物流也结束了。解决方法二:使用前端业务系统确认口径或使用归档策略,可以用定期的归档时间作为结束日期。
3.三种事实表比较
事务事实表 | 周期快照事实表 | 累计快照事实表 | |
---|---|---|---|
时期/时间 | 离散事务时间点 | 周期快照事实表 | 累积快照事实表 |
日期维度 | 事务日期 | 快照日期 | 相关业务过程涉及的多个日期 |
粒度 | 每行代表实体的一个事务 | 每行代表周期的一个实体 | 每行代表一个实体的生命周期 |
事实 | 事务事实 | 累积事实 | 相关业务过程事实和时间间隔事实 |
事实表加载 | 插入 | 插入 | 插入与更新 |
事实表更新 | 不更新 | 不更新 | 业务过程变更时更新 |
4.无事时的事实表
在维度模型中,事实表用事实来度量业务过程,不包含事实或度的事实表称为“无事实的事实表”。主要有以下两种:
(1)事件类,记录发生的事件
(2)条件、范围或资格类的,记录维度与维度多对多之间的关系
5.聚集型事实表
数据仓库的性能是数据仓库建设是否成功的重要标准之一。聚集主要是通过汇总明细粒度数据来获得改进查询性能的效果。通过访问聚集数据,可以减少数据库在响应查询时必须执行的工作量,能够快速响应用户的查询,同时有利于减少不同用户访问明细数据带来的结果不一致问题。
- 聚集的基本原则
一致性
避免单一表设计
聚集粒度可不同
- 聚集的基本步骤
(1)确定聚集维度
(2)确定一致性上钻
(3)确定聚集事实