按固定周期对事实表进行统计生成的表,按时间段保存记录,增量更新。
需要统计一个季度的商品成交量怎么取做?如果用一个季度内的事实事务表进行计算,虽然可以得出结果但是效率太低,在实际生产中并不可行,因此,需要定期对指定的度量进行整合,作为周期快照表用于下游应用。一般设计事实表时,事务事实表和周期快照表是成对设计的,大部分的周期表由事务表加工产生,还有部分特殊数据是直接应用系统产生(如订单评价)。
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,时间间隔如每天、每月、每年等等。典型的例子如销售日快照表、库存日快照表等。它统计的是间隔周期内的度量统计,如历史至今、自然年至今、季度至今等等。周期快照表没有粒度的概念,取而代之的是周期+状态度量的组合,如历史至今的订单总数,其中历史至今是一个周期,订单总数是度量。周期快照事实表的粒度是每个时间段一条记录,通常比事务事实表的粒度要粗,是在事务事实表之上建立的聚集表,比如说时间周期是1周,那么这个周期快照事实表的一条记录就是这一周的对于某个度量的统计值。周期快照事实表的维度个数比事务事实表要少,但是记录的事实要比事务事实表多(为什么记录的事会比事务事实表表多呢?)。事务事实表是稀疏表,周期快照表是稠密表。
扩展资料:什么是稀疏表,什么是稠密表?
- 稀疏表:当天只有发生了操作才会有记录
- 稠密表:当天没有操作也会有记录,便于下游使用
周期快照事实表的日期维度通常是记录时间段的终止日,记录的事实是这个时间段内一些聚集事实值。事实表的数据一旦插入即不能更改,其更新方式为增量更新。
1)统计的是间隔周期内的度量统计,如历史至今、自然年至今、季度至今等等
2)周期快照表没有粒度的概念,取而代之的是周期+状态度量的组合,如历史至今的订单总数
3)事实事务表是稀疏表,周期快照表是稠密表
混合维度的周期快照事实表
反映不同买家对于不同买家的统计信息全量快照事实表
事务事实表是稀疏的,只有当天发生的业务过程,事实表才会记录该业务过程的事实, 如下单、支付等;而快照事实表是稠密的,无论当天是否有业务过程发生,都会记录一行,比如针对卖家的历史至今的下单和支付金额,无论当天卖家是否有下单支付事实,都会给该卖家记录一行。假如卖家之前下单6笔,昨天没有下单,但是还是会给他在昨天的分区里面纪录它截止目前为止下单6笔的纪录。
按过程对事实表进行统计生成的表,将每个事务切分成多个小事务,明确开始和结束的状态,每个小事务只保存一条结果。
累计快照事实表的主要用于研究**事件之间时间间隔,**当然并不仅限于此,还有一些特殊用途,可以在实际工作中灵活运用。
累积快照事实表和周期快照事实表有些相似之处,它们存储的都是事务数据的快照信息。但是它们之间也有着很大的不同,周期快照事实表记录的确定的周期的数据,而累积快照事实表记录的不确定的周期的数据。累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。例如订单累计快照事实表会有付款日期,发货日期,收货日期等时间点。
事务事实表中一条交易记录会每天有一条数据来记录整个交易过程;而累积快照事实表只会有一条记录,数据会一致更新直到过程结束。
累积快照事实表代表的是完全覆盖一个事务或产品的生命周期的时间跨度,它通常具有多个日期字段,用来记录整个生命周期中的关键时间点。另外,它还会有一个用于指示最后更新日期的附加日期字段。由于事实表中许多日期在首次加载时是不知道的,所以必须使用代理关键字来处理未定义的日期,而且这类事实表在数据加载完后,是可以对它进行更新的,来补充随后知道的日期信息。
周期快照事实表记录的是重复的可预测到的时间间隔的事实,例如帐户月结余事实表,用来记录每个月末的帐户结余信息。一般周期快照的数据会按报表需要的周期进行记录,比较适合周期长一些的情况。
而累计快照适用于较短周期,有着明确的开始和结束状态的过程,如一个订单执行的过程,并记录过程中每个步骤的执行时间,使分析人员对执行的过程有整体的把握。周期快照事实表记录上每个步骤的执行时间是逐步建立的,随着执行的过程逐步更新的事实表中。
数据不断更新:不同于前面说的两种事实表,累计快照事实表中的数据实例会定期更新。
如上图所示多事务事实表中一条交易记录会每天有一条数据来记录整个交易过程;而累积快照事实表只会有一条记录,数据会一致更新直到过程结束。
适用于业务过程有明确的起止时间的短生命周期场景,如交易订单、物流订单。长生命周期的实体记录完全可以由周期快照表实现,如商品、用户。
业务的流程不是只有一种,如交易流程可能是
① 下单、支付、发货、确认
② 下单、关闭订单
③ 。。。
对于不同过程,要设计统一的结束标志,没有的业务时间置空
看出来数据更新的前后对比了吗?
有时需要将每个过程时间间隔作为事实放在表中,如下单到支付时间间隔、支付到发货时间间隔、发货到确认时间间隔,方便下游直接使用
1)全量表:一般是**日分区,**每天存储前一天的全量数据和当天增量数据进行合并,保证每条数据的最新状态,此方式适用于数据量不大的情况
2)全量变化表:累积事实表用于保存生命周期短的实例,所以可以根据业务实体从开始到结束的最大时间间隔,如交易业务最大时间跨度200天,每天保存的是过去200天的全量数据,200天之前的数据存储在归档表中。适用于数据量大的场景
3)以业务结束时间分区:每天分区中存放的是当天结束的业务,然后用一个非常大的分区(如 3000-12-31)保存所有至今未结束的记录,这种方式不会浪费存储资源
详情可以参考我之前的博客有所介绍:https://blog.csdn.net/MrZhangBaby/article/details/108096179
嗯,后面再研究研究《大数据之路-阿里巴巴大数据实践》《数据仓库工具书》再做更加细致的分享吧~
参考材料:
https://www.jianshu.com/p/f55238c6e0b4
https://www.jianshu.com/p/453afb5382ea
《大数据之路-阿里巴巴大数据实践.pdf》