累计快照事实表的主要用于研究事件之间时间间隔,当然并不仅限于此,还有一些特殊用途,可以在实际工作中灵活运用。
设计特点
1)数据不断更新:不同于前面说的两种事实表,累计快照事实表中的数据实例会定期更新。
如上图所示多事务事实表中一条交易记录会每天有一条数据来记录整个交易过程;而累积快照事实表只会有一条记录,数据会一致更新直到过程结束。
2)适用于业务过程有明确的起止时间的短生命周期场景,如交易订单、物流订单。长生命周期的实体记录完全可以由周期快照表实现,如商品、用户。
3)业务的流程不是只有一种,如交易流程可能是
① 下单、支付、发货、确认
② 下单、关闭订单
③ 。。。
对于不同过程,要设计统一的结束标志,没有的业务时间置空
样例设计
有时需要将每个过程时间间隔作为事实放在表中,如下单到支付时间间隔、支付到发货时间间隔、发货到确认时间间隔,方便下游直接使用
物理实现
1)全量表:一般是日分区,每天存储前一天的全量数据和当天增量数据进行合并,保证每条数据的最新状态,此方式适用于数据量不大的情况
2)全量变化表:累积事实表用于保存生命周期短的实例,所以可以根据业务实体从开始到结束的最大时间间隔,如交易业务最大时间跨度200天,每天保存的是过去200天的全量数据,200天之前的数据存储在归档表中。适用于数据量大的场景
3)以业务结束时间分区:每天分区中存放的是当天结束的业务,然后用一个非常大的分区(如 3000-12-31)保存所有至今未结束的记录,这种方式不会浪费存储资源