漫谈事实表如何设计(四)

一.累积型快照事实表的应用场景介绍

针对电商交易,设计了交易下单/支付/确认收货事务事实表, 用于统计下单/支付/确认收货的子订单数、GMV等。但仍然有很多需求, 此事务事实表很难满足,比如统计买家下单到支付的时长、买家支付到卖家发货的时长、买家从下单到确认收货的时长等。如果使用事务事实表进行统计,则逻辑复杂且性能很差。对于类似于研究事件之间时间间隔的需求,釆用累积快照事实表可以很好地解决。

二.累积型快照事实表的设计过程

2.1.选择业务过程

选择业务过程,在多事务事实表当中介绍了业务的流转过程,主要有四个事件,即买家下单、买家支付、卖家发货、 买家确认收货业务过程。对于这四个业务过程,在事务统计中只关注下单、支付和确认收货三个业务过程;而在统计事件时间间隔的需求中, 卖家发货也是关键环节。所以针对累积快照事实表,我们选择这四个业务过程进行讨论。

2.2.确定粒度

确定粒度,一般都是参考多事务事实表,遵循最小粒度优先原则,比如订单商品粒度。

2.3.确定维度

确定维度,拿交易的多事务事实表来讲,维度主要有买家、卖家、 店铺、商品、类目、发货地区、收货地区等。四个业务过程对应的时间字段,格式为日期+时间,分别为下单时间、支付时间、发货时间、确认收货时间等。

2.4.确定事实

确定事实,对于累积快照事实表,需要将各业务过程对应的事实均放入事实表中。比如淘宝交易累积快照事实表,包含了各业务过程对应的事实,如下单对应的下单金额,支付对应的折扣、邮费和支付金额,确认收货对应的金额等。累积快照事实表解决的最重要的问题是统计不同业务过程之间的时间间隔,建议将每个过程的时间间隔作为事实放在事实表中。

2.5.退化维度

退化维度,在大数据的事实表模型设计中,更多的是考虑提高下游用户的使用效率,降低数据获取的复杂性,减少关联的表数量。 一方面,存储成本降低了,而相比之下CPU成本仍然较高;另一方面, 在大数据时代,很多维表比事实表还大,如淘宝几十亿的商品、几亿的买家等,在分布式数据仓库系统中,事实表和维表关联的成本很高。所以在传统的维度模型设计完成之后,在物理实现中将各维度的常用属性退化到事实表中,以大大提高对事实表的过滤查询、统计聚合等操作的效率,具体详情不再赘述。

2.6.实例

累积快照事实表和事务性事实表直观上差异比较大的一点就是:累积快照事实表,多个业务过程,只存在一条记录,当业务过程发生了,只是修改这一条记录,而事务性事实表是会产生多条记录,表相对比较稀疏。


累积快照事实表.png

三.累积型快照事实表的特性

累积快照事实表适用于具有较明确起止时间的短生命周期的实体, 比如交易订单、物流订单等,对于实体的每一个实例,都会经历从诞生到消亡等一系列步骤。对于商品、用户等具有长生命周期的实体,一般采用周期快照事实表更合适。
累积快照事实表的典型特征是多业务过程日期,用于计算业务过程之间的时间间隔。但结合阿里巴巴数据仓库模型建设的经验,对于累积快照事实表,还有一个重要作用是保存全量数据。对于淘宝交易,需要保留历史截至当前的所有交易数据,其中一种方式是在ODS层保留和源系统结构完全相同的数据;但由于使用时需要关联维度,较为麻烦, 所以在公共明细层需要保留一份全量数据,淘宝交易累积快照事实表就承担了这样的作用——存放加工后的事实,并将各维度常用属性和订单杂项维度退化到此表中。通常用于数据探查、统计分析、数据挖掘等。

四.累积型快照事实表的特殊处理

4.1非线性过程

实际实践中,累积型快照事实表累积的业务过程不一定都是线性的,买家下单、买家支付、卖家发货、 买家确认收货这是正常的流程,也有可能存在买家手工或者第三方人员手工关闭订单,即订单关闭状态,这也意味着该几个业务过程生命周期的终结。所以应该设立一个标识,当订单交易完成或者订单关闭都算作生命周期的终结。

4.2多源过程

实际实践中,可能还存在买家退货退款,物流相关情况等,这些都是可能发现循环业务过程的情况,针对这些情况,考虑是否将售后和物流等业务过程加入,就需要考虑加入以后是否会影响粒度,还有针对不确定循环次数的业务过程,是加第一次还是最后一次,都是需要考虑具体业务情况来定的。

五.累积型快照事实表如何实现

5.1全量表的实现方式

第一种方式是全量表的形式。此全量表一般为日期分区表,每天的分区存储昨天的全量数据和当天的增量数据合并的结果,保证每条记录的状态最新。(保存历史分区,而不是只保留最新的状态,实践证明历史分区也有存在的必要性,虽然不常用。)此种方式适用于全量数据较少的情况。如果数据量很大, 此全量表数据量不断膨胀,存储了大量永远不再更新的历史数据,对 ETL和分析统计性能影响较大。可以想象一下,每天每个分区都要存储历史至今所有的数据,这个带来的存储开销是非常巨大的。

5.2全量表的改进方式(解决存储开销问题)

第二种方式是全量表的变化形式。此种方式主要针对事实表数据量很大的情况。较短生命周期的业务实体一般从产生到消亡都有一定的时间间隔,可以测算此时间间隔,或者根据商业用户的需求确定一个相对较大的时间间隔。比如针对交易订单,我们以200天作为订单从产生到消亡的最大间隔(一个用户基本上不可能200天前支付了,200天以后还没有确认收货的情况,但是实际情况往往存在那么几单异常情况)。设计最近200天的交易订单累积快照事实表,每天的分区存储最近200天的交易订单,而200天之前的订单则按照gmt_Create创建分区存储在归档表中。此方式存在的一个问题是200天的全量表根据商业需求需要保留多天的分区数据,而由于数据量较大,存储消耗较大。

六.三种事实表的比较

6.1事务性事实表

事务事实表记录的事务层面的事实,用于跟踪业务过程的行为,并 支持几种描述行为的事实,保存的是最原子的数据,也称为“原子事实 表”。事务事实表中的数据在事务事件发生后产生,数据的粒度通常是 每个事务一条记录。一旦事务被提交,事实表数据被插入,数据就不能 更改,其更新方式为增量更新。

6.2周期型快照事实表

周期快照事实表以具有规律性的、可预见的时间间隔来记录事实, 如余额、库存、层级、温度等,时间间隔为每天、每月、每年等,典型的例子如库存日快照表等。周期快照事实表的日期维度通常记录时间段 的终止日,记录的事实是这个时间段内一些聚集事实值或状态度量。事 实表的数据一旦插入就不能更改,其更新方式为增量更新。

6.3累积型快照事实表

累积快照事实表被用来跟踪实体的一系列业务过程的进展情况,它 通常具有多个日期字段,用于研究业务过程中的里程碑过程的时间间 隔。另外,它还会有一个用于指示最后更新日期的附加日期字段。由于事实表中许多日期在首次加载时是不知道的,而且这类事实表在数据加 载完成后,可以对其数据进行更新,来补充业务状态变更时的日期信息和事实。

三种事实表的比较.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容