什么是周期快照事实表?什么是累积快照事实表?

2024年5月4日12:53:46什么是周期快照事实表?什么是累积快照事实表?已关闭评论

事实表是指存储事实记录的表。事实表中的每行数据代表一个业务事件,如下单、支付、退款、评价等。“事实”这个术语表示的是业务事件中的度量,如可统计次数、个数、金额等。例如,2022年2月21日,小李在某网站花费99元购买了Java基础课程,在这个业务事件中,涉及的维度有时间、用户、课程、商家,涉及的事实度量则是99元。

事实表作为数据仓库建模的核心,需要根据业务过程来设计,包含了引用的维度和业务过程有关的度量。事实表的每一行数据包括具有可加性的数值型的度量值和与维度表相连接的外键,并且通常都具有两个和两个以上的外键。

事实表的特征有以下三点:

①通常数据量比较大。

②内容相对比较窄,列数通常比较少,主要是一些外键ID和度量值字段。

③经常会发生变化,每天都会增加新数据。

作为度量业务过程的事实,一般为整形或浮点型的十进制数值,有可加性、半可加性和不可加性三种类型。

①可加性事实。最灵活、最有用的事实度量是完全可加的,可加性事实可以按照与事实表关联的任意维度汇总,如订单金额。

②半可加性事实。半可加性事实可以汇总某些维度,但不能汇总所有维度。差额是常见的半可加事实,除了时间维度,差额可以跨所有维度进行汇总操作。如每天的账户余额加起来毫无意义。

③不可加事实。一些事实是完全不可加的,如比率。对非可加事实,一种好的方法是分解为可加的组件来实现聚集。

事实表通常有以下几种:

①事务事实表。事务事实表是指以每个事务或事件为单位,如一笔支付记录作为事实表中的一行数据。

②周期快照事实表。周期快照事实表中不会保留所有数据,只保留固定时间间隔的数据,如每天或每月的销售额,以及每月的账户余额等。

③累积快照事实表。累积快照事实表用于跟踪业务事实的变化。

下面针对事实表进行详细介绍。

1.事务事实表

事务事实表用来记录业务过程,它保存的是业务过程的原子操作事件,即最细粒度的操作事件。粒度是指事实表中一行数据表达的业务细节程度。

事务事实表可用于分析与业务过程相关的各项统计指标,由于其保存了最细粒度的记录,可以提供最大限度的灵活性,可以支持无法预期的各种细节层次的统计需求。

设计事务事实表时一般可遵循以下四个步骤:选择业务过程→声明粒度→确定维度→确定事实。

①选择业务过程

在业务系统中,挑选我们感兴趣的业务过程,业务过程可以概括为一个个不可拆分的行为事件,如在线教育交易中的下单、付款、加购等。通常情况下,一个业务过程对应一张事务事实表。

②声明粒度

业务过程确定后,需要为每个业务过程声明粒度,即精确定义每张事务事实表的每行数据表示什么。应该尽可能选择最细粒度,以此来应对各种细节程度的统计需求。

典型的粒度声明,如订单事实表中一行数据表示的是一个订单中的一门课程。

③确定维度

确定维度是指确定与每张事务事实表相关的维度有哪些。

确定维度时应尽量多地选择与业务过程相关的环境信息。因为维度的丰富程度决定了维度模型能够支持的指标丰富程度。

④确定事实

此处的“事实”一词,指的是每个业务过程的度量值(通常是可累加的数字类型的值,如次数、个数、件数、金额等)。

经过上述四个步骤,事务事实表基本设计完成了。第一步选择业务过程,可以确定有哪些事务事实表,第二步可以确定每张事务事实表的每行数据是什么,第三步可以确定每张事务事实表的维度外键,第四步可以确定每张事务事实表的度量值字段。

事务事实表可以保存所有业务过程的最细粒度的操作事件,理论上可以支撑与各业务过程相关的各种统计粒度的需求。但对于某些特定类型的需求,其逻辑可能会比较复杂,或者效率会比较低下,如以下两种情况所示。

·存量型指标

例如,购物车存量、账户余额等。此处以在线教育中的加购业务为例,用户每次将一门课程添加进购物车,会在购物车业务表中插入一条数据。当用户将这门课程从购物车中移除时,会将标记删除字段deleted更改为1。在构建用户加购物车业务的事务事实表时,会存储所有的用户添加购物车这一业务过程,表中一行数据记录的是一个用户将一门课程添加进购物车的行为。

假定现在有一个需求,要求统计截至当日的各用户各科目的购物车存量。由于在加购物车事务事实表中只保存了加购物车操作,而没有记载减购物车操作,所以就无法分析购物车存量。

·多事务关联统计

例如,需要统计最近30天,用户下单到支付的时间间隔的平均值。统计思路应该是找到下单事务事实表和支付事务事实表,过滤出最近30天的记录,然后按照订单id对两张事实表进行关联,之后用支付时间减去下单时间,然后再求平均值。

逻辑上虽然并不复杂,但是效率较低,因为下单事务事实表和支付事务事实表均为大表,大表与大表的关联操作应尽量避免。

可以看到,在上述两种场景下事务事实表的表现并不理想。下面要介绍的另外两种类型的事实表用来弥补事务事实表的不足。

2.周期快照事实表

周期快照事实表以具有规律性的、可预见的时间间隔来记录事实,主要用于分析存量型(如商品库存、账户余额)或者状态型(空气温度、行驶速度)指标。

如表6-9所示,为某在线教育网站全部课程历史至今的周期快照事实表,记录了所有课程历史至今的交易次数、交易金额、加入购物车次数、收藏次数等。

表6-9 周期快照事实表

对于商品库存、账户余额这些存量型指标,业务系统中通常会计算并保存最新结果,所以定期同步一份全量数据到数据仓库,构建周期快照事实表,就能轻松应对此类统计需求,而无须再对事务事实表中大量的历史记录进行聚合了。

上文中我们提到的分析购物车存量的示例,就可以通过针对购物车表构建周期快照事实表来解决,具体实现过程可参见6.6.2节。

对于空气温度、行驶速度这些状态型指标,由于它们的值往往是连续的,我们无法捕获其变动的原子事务操作,所以无法使用事务事实表统计此类需求。而只能定期对其进行采样,构建周期快照事实表。

构建周期快照事实表有以下几个步骤。

①确定粒度

周期快照事实表的粒度可由采样周期和维度描述,故确定采样周期和维度后即可确定粒度。采样周期通常选择每日。

维度可根据统计指标决定,如指标为统计每个用户每个科目的购物车存量,则可确定维度为用户和科目。

确定完采样周期和维度后,即可确定该表粒度为“每日-用户-科目”。

②确定事实

事实也可以根据统计指标决定,如指标为统计每个用户每个科目的购物车存量,则事实为购物车存量。

3.累积快照事实表

累积快照事实表是基于一个业务流程中的多个关键业务过程联合处理而构建的事实表,如交易流程中的试听、下单、支付等业务过程。

如表6-10所示,数据仓库中可能需要累计或者存储,从下订单开始到订单商品被打包、运输和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。

表6-10 累积快照事实表

累积快照事实表通常具有多个日期字段,每个日期对应业务流程中的一个关键业务过程(里程碑)。

累积快照事实表主要用于分析业务过程(里程碑)之间的时间间隔等需求。例如,前文提到的用户下单到支付的平均时间间隔,使用累积快照事实表进行统计,就能避免两个事务事实表的关联操作,从而变得十分简单高效。

累积快照事实表的设计流程与事务事实表类似,也可以采用以下四个步骤,下面重点描述与事务事实表的不同之处。

①选择业务过程。选择一个业务流程中需要关联分析的多个关键业务过程,多个业务过程对应一张累积快照事实表。

②声明粒度。精确定义每行数据表示的是什么,尽量选择最小粒度。

③确定维度。选择与各业务过程相关的维度,需要注意的是,每个业务过程均需要一个日期维度。

④确定事实。选择各业务过程的度量值。

  • 版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。