本节重点:对事实表描述,几乎可以涵盖所有类型的事实表
1、事实表结构
事实表存储什么数据?
发生在现实世界中的操作型事件,产生的度量值,存储在事实表中;
比如:电商支付事实表,存储某个人、某时某刻某件商品支付成功金额;
我的理解:事实表用于存储现实世界中产生的操作过程
事实表还包含外键,用于和维度表关联,也包含某些退化维度键和日期、时间戳等;
2、可加、半可加、不可加事实
可加:可以按照任何维度汇总
半可加:对某些维度汇总
不可加:比如比率
3、事实表中的空值
事实表度量值可以存储空值,聚合函数(sum/count/min/max/avg)等可以对空值计算,事实表外键不能存储空值;
4、一致性事实
某些度量值可能出现在不同事实表中,如果不同表中度量值粒度一致,命名应该相同;如果相互不兼容,应该用不同命名方式告诫使用者他们的区别;
5、事实表种类
-
事务事实表
记录一个完整的业务过程,如支付业务、下单业务;及最细粒度的操作事件,该事件不可拆分且已经完成;
-
周期型快照事实表
具有周期性,规律性、可预见的时间间隔来记录事实的发生,主要用于记录一些存量(如商品一段时间间隔库存,账户余额)或状态型(空气温度、行车速度)的指标;
维度、速度等这些指标是连续型的,我们无法捕获其变动的原子事务操作,因此无法使用事务性事实表存储,而采用定期采集数据,构建周期型快照事实表;
-
累积型快照事实表
基于一个业务流程中多个关键业务过程联合处理构建的事实表,该业务过程通常不能短时间完成,不同时间有不同业务过程,比如交易流程中的下单、支付、发货、确认收货等过程;
累积型快照事实表通常包含多个业务时间,每个关键业务过程对应一个时间;
订单id 用户id 下单日期 支付日期 发货日期 确认收货日期 订单金额 支付金额 1001 1234 2023-06-14 2023-06-15 2023-06-16 2023-06-17 1000 1000 累计型快照事实表主要用于分析业务过程关键流程之间间隔时间等需求,比如上面提到用户下单到支付的平均时间;笔者所在保险行业中,一个救援过程(接到报案时间–>救援师傅出发时间–>救援师傅到达时间–>救援师傅完成时间)包含的平均时间;使用累积性快照事实表记录业务过程,避免多个事务事实表之间关联,让过程 变得高效;
-
无事实的事实表
有些业务过程没有事实,仅仅记录该业务过程;
比如:某个时间、某个老师在上某节课
-
合并事实表
将多个粒度相同的事实合并为一体,能带来方便;
-
聚集事实表或OLAP多维数据库
针对某些维度对原子粒度事实进行简单数字化上卷操作,目的是为了提高查询性能;
这个过程通常对应数仓中的中间结果层,进行某些维度汇总之后,其他层可以直接使用,提高查询性能;
6、小结
本小节主要介绍了事实表相关基础知识:事实表由那些列组成、事实表中度量值分类、事实表中空值限制、一致性、根据不同业务过程特点,对应不同类型事实表及这些事实表特点等内容展开说明;