暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

谈笑间学会数仓—事务事实表

小生love生活 2020-08-19
729

事务事实表

概念

可以看做是保存某一事务的日志数据,事务一旦被提交就成为历史数据,只能以增量的方式维护。

事务事实表记录的事务层面的事实,保存的是最原子的数据,也称“原子事实表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是每个事务记录一条记录。一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。由于事实表具有稀疏性质 ,因此只有当天数据才会进入 当天的事实表中,相当于每个分区里面都是每天的数据,不包含之前的数据。

事务事实表的日期维度记录的是事务发生的日期,它记录的事实是事务活动的内容。用户可以通过事务事实表对事务行为进行特别详细的分析。

为什么事务事实表具有稀疏性质?

事实表一般围绕着度量来建立,当度量产生的时候,事实记录就生成了。度量可以是销售数量、交易流水值、月末节余等数值。如果同时生成多个度量值的话,我们可以在一个事实表中建立多个事实。当我们的事实表中的事实比较多时,有可能多个事实不同时发生,如果同时生成的几率很小,我们称之为稀疏事实表(Sparse Facts)。

设计案例

场景:为交易事务设计事实表

  • 业务分析:交易事务包括下单、支付、发货、完结四个业务过程

  • 确定粒度:同一个订单中可以包含多个商品,每个商品对应一个子订单。在上述四个业务过程中下单、支付、完结选择子订单作为粒度,而发货业务过程包含物流信息,以父订单为粒度

  • 确定维度:卖家、买家、商品、商品类目、发货地区、收货地区、父订单一级杂项维度

  • 确定事实:每个业务过程有自己的事实,如下单过程的下单金额、下单数量;支付过程的支付金额、积分金额等

  • 冗余维度:为了提升效率,把常用的维度冗余到事实表

单事务事实表

一个业务过程一张事实表,方便对每个业务做独立分析

多事务事实表

将不同业务过程放在同一个事实表中,又可以分为不同业务过程使用不同事实字段和不同业务过程使用相同事实字段两种

1)不同业务过程使用不同事实字段,一般用于业务相似,粒度相同但是业务过程的度量差异大的场景。有两个典型的问题:

① 在数据中遇到不是当前业务过程的度量,采用零值处理

② 表中存在多个业务,如何标记?给每一个数据加一个属性标识是否当日业务

2)不同业务过程使用相同事实字段,用一个标签字段标识是那种业务(如商品的收藏/删除)。一般用于业务相似,粒度相同同时业务过程的度量差异不大的场景。但是有一个问题要注意,因为用同一个字段标识不同业务的度量,所以数据一个周期内会有多条记录


两种事实表对比

另外,如果一个业务过程的事实量巨大,不宜使用多事务事实表,会造成大量零值



今天就先写到这里吧,后续再来一起看维度表、全量表、增量表、拉链表、流水表、周期快照表、累计快照表等特殊表的设计及案例~
文章转载自小生love生活,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论