【数仓】事实表设计过程

以下笔记来自 <阿里巴巴大数据实践>.

事实表的设计过程

Kimball 对于维度模型设计采用四步设计方法, 但是在互联网大数据场景下, 可以进行一些改进.

1, 确定业务过程和事实表类型

首先, 明确业务需求后, 对业务的生命周期进行分析,
明确关键的业务步骤, 然后选择与需求有关的业务过程.

业务过程, 往往是一个行为动词, 比如下单、付款、收货等等.

选择业务过程时, 如果选择的是一个业务过程, 那么事实表类型为单事务事实表.
如果选择的是多个业务过程, 那么事实表应该是多个业务过程累积快照事实表,
例如要记录下单、付款、确认收货等等的间隔时间.

2, 确定粒度

粒度, 代表了事实表的每一行所表示的业务含义, 与事实表度量有关的细节层次.
明确粒度, 可以确保对事实表中行的意思的理解不会产生混淆, 按照同样的细节层次记录所有事实.
尽量选择最细级别的原子粒度, 可以确保事实表的应用具有最大的灵活性.
比如父子订单, 事实表的粒度应该选择子订单级别.

3, 确定维度

粒度确定后, 主键也就确定了, 对应的维度组合与相关的维度字段就可以确定了,
确定维度, 应该选择能够清楚描述业务过程所处的环境的维度信息.
例如订单付款事务事实表, 相关维度有买家 卖家 商品 收货人 时间 等等.

4, 确定事实

确定业务过程的度量是什么, 以此选择与业务过程有关的所有事实, 并且事实的粒度和事实表粒度保持一致.
比如订单付款事务事实表, 事实有支付金额、运费、优惠金额、等等.

5, 冗余维度

在传统建模的星型模型中, 维度被单独存放在另一维表中, 通过外键关联, 目的是减少冗余和存储消耗.
但是在大数据的建模中, 更多的是考虑数据下游的使用效率, 降低数据获取的复杂性,
所以通常把常用维度冗余到事实表中, 这样对事实表进行过滤查询、控制聚合、排序等等操作都会很便利.