事实表

刘超 20天前 ⋅ 831 阅读   编辑

一、基本概念

  1、业务过程

  事实表描述了业务过程,包含引用的维度和业务的度量,与维度表相比数据量大的多,增长速度很快;描述业务过程的细节程度称为粒度

  2、度量

  事实表中度量主要分为三种:可加、半可加、不可加,其中,可加的度量,在任意维度下都可以累加,例如订单中的订单金额、商品数量等;半可加的度量,有的时候可以累加,有的时候不可以累加,比如学生成绩表中各科成绩,针对每个人累加是有意义的,但针对全班累加,是没有任何意义等;不可加的度量,在任何场景下都不可累加,比较典型的就是比例,只对单行记录有意义,累加是无意义的。

  3、一致性

  一致性可以有两层理解,一是表内部的一致性,二是表与表的一致性
  a、表内部的一致性是指:在同一个表内部,所有记录的粒度、维度等信息均是一致的,每一列的单位,枚举值等均是一致
  b、表与表之间的一致性是指:如果我们在进行多个表的数据合并时,应该保证彼此之间的对于同一事实的计算,是在同一粒度和维度之下。例如下单表、退单表除了要保证维度计算一致外,金额这块也需要特殊处理,我们可设置下单表的金额为正数,退单表的金额为负数,这样我们把这两表合在一起时就能保证最终统计结果是正确的。

  4、维度属性

  把维度属性保存在事实表中称为维度退化

二、常见事实表

  1、事务事实表

  事务事实表的一行,对应空间或时间上某点的度量事实。在实际的使用中,其一般作为明细使用,即记录业务系统中的事务行明细数据,比如出行行业中典型的下单明细表、支付明细表等,基本每一个表对应一个典型的事件类型,这类表记录了业务最明细的数据

  2、周期快照事实表

  周期快照事实表中每一行发生在某一标准周期的事件,比如某天、某周、某月的度量事件。最典型的周期快照事实表,比如每日厂库库存快照表、每日用户余额快照表,这些快照表是对当日最后时刻的快照统计,当然这个快照的具体时间,实际上是与当时抽取的时间点有关系,并非绝对意义上的0点。

  3、累积快照事实表

  累积快照事实表的行汇总了发生在过程开始和结束之间可预测的步骤内的度量事件。以事务事实表中的提到的出行行业的例子为例,可以做一个和订单相关的,涉及订单下单、推单、抢单、支付等各个环节的一张订单全生命周期快照表。累积快照表与周期快照表最大的最大不同是累积快照表是由多个业务过程的时间节点组成,这些节点可能不是在一个时间点完成的。

  4、无事实的事实表

  单纯只记录某一动作发生,其事实的量化是非数字的,比较典型的为访问点击日志。这些日志(比如netty日志),如果作为明细数据,只是单纯记录了用户的点击行为或者浏览行为。当然我们可以对这些数据进行很多统计,只是这些记录本身是没有度量值的

  5、聚集事实表

  聚集事实表是对原子粒度事实表进行简单的数字化上操作,直观理解可以为进行汇总,这样在进行查询时可以提高效率。

  实际我们在工作过程中,处理进行简单的汇总操作,也会构建一个CUBE表,将不同纬度的数据组合在一张表中,相当于提前进行各种维度的预计算,并将这些数据提供给下游系统使用。

三、设计原则

  1、尽可能包含所有业务相关事实,即使会冗余。因为事实表通常为数值型,带来的开销在可以忍受的范围内,却可以极大的方便使用。注意只选择与当前业务有关的事实,下单过程中不应该有支付信息

  2、分解不可加性事实为可加组件,如分解优惠比率为优惠金额和原价

  3、设计事实表之前先设计好粒度,粒度越细可支持的需求就越多。一个事实表中事实不能有多种粒度

  4、适当的使用退化维度,减少下游关联操作次数

四、设计步骤

  确认业务过程 -> 确定粒度 -> 确定维度 -> 确定事实,具体见4步骤维度设计过程  

五、参考文章
  1、https://www.jianshu.com/p/9b4d4d53d7aa

注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: