7.事实设计

事务事实表

介绍

  • 任何类型的时间都可以理解成一种事务,如交易过程中的创建订单、买家付款,物流过程中的揽货、发货、签收等。

  • 事务事实表,即针对这些过程构建的一类事实表,用来跟踪定义业务过程的个体行为,提供丰富的分析能力,作为数据仓库原子的明细数据

设计过程

1. 选择业务过程

  • 如:淘宝交易订单的流转过程;(创建订单、买家付款、卖家发货、买家确认收货;即下单/支付/发货/成功完结)

2. 确定粒度

  • 确定事务事实表每一行所表达的细节层次。

  • 如:下单/支付/成功完结三个业务过程选择交易子订单粒度,即每个子订单为事务事实表的一行,每个子订单所表达的细节信息为:交易时间、卖家、买家、商品。

  • 卖家发货这个业务过程可以选择子订单粒度,即将每个子订单作为卖家发货事实表的一个细节。

3. 确定维度

  • 按照经常用于统计分析的场景,确定维度包括:卖家、买家、商品、商品类目、发货地区、收货地区、父订单维度以及杂项维度。

  • 杂项维度:由于订单的属性较多,比如订单的业务类型、是否无线交易、订单的attributes属性等,对于这些使用较多却又无法归属到上述买卖家或商品维度中的属性,则新建一个杂项维度进行存放。

4. 确定事实

  • 事实表应该包含与其描述过程有关的所有事实

  • 淘宝交易事务事实表为例,选择下单、支付、成功完结,不同的业务过程拥有不同的事务。

  • 下单业务过程中包含下单金额、下单数量、下单分摊金额;
    支付业务过程中包含支付金额、分摊邮费、折扣金额、红包金额、积分金额;
    完结业务过程中包含确认收获金额。

  • 退化维度(阿里增加)

  • 阿里巴巴数据仓库出于效率和资源的考虑,将常用维度全部退化到事实表中,使下游分析使用模型更加方便。

5. 冗余维度

  • Kimball维度建模理论建议在事实表中只保存这些维表的外键,而淘宝交易事务事实表在Kimball维度建模基础上做了进一步的优化,将一些维度属性都冗余到事实表中,提高对事实表进行过滤查询、统计聚合的效率。

单事务事实表

  • 针对每个业务过程设计一个事实表。

多事务事实表

  • 定义:同一个事实表包含不同的业务过程。

  • 多事务事实表在设计时有两种方法进行事实的处理:
    ①不同业务过程的事实使用不同的事实字段进行存放。
    ②不同业务过程的事实使用同一个事实字段进行存放,但增加一个业务过程标签。

  • 粒度相同,维度相似时使用多事务事实表。如果粒度不同,则必定是不同的事实表。

周期快照事实表

半可加性质定义及案例

  • "半可加性质"是指某一现象、属性或性质在某种程度上是可加的,但在另一种程度上却不可加

  • 举个例子来说,假设有一个公司的销售业绩是半可加性质。如果这个公司有两个部门,分别是A部门和B部门,那么A部门的销售额加上B部门的销售额就等于整个公司的销售额,这符合可加性质。但是,如果A部门和B部门的销售人员之间存在重叠,即有些客户既被A部门销售人员拜访过,又被B部门销售人员拜访过,那么计算整个公司的销售额时就不能简单地将A部门销售额和B部门销售额相加,因为存在重复计算的问题。

  • 在这种情况下,半可加性质意味着销售额的计算需要考虑到重叠部分的去重,以避免重复计算。

  • 事务事实表中的事实是完全可加的,但快照模型将至少包含一个用来展示半可加性质的事实。

特性

1. 用快照采样状态

  • 快照事实表以预定的间隔采样状态度量。

  • 举例:

  • 淘宝活动运营小二或者卖家经常需要看一些交易状态数据。

  • 对于卖家,可能每天早上都想看一下截至昨天的成交情况;对于小二而言,可能在频繁的活动周期就需要查看一次成交情况。

  • 这些状态度量可以每天通过事实表进行聚集,但随着时间跨度变大,聚集效率会越来越低,因此需要设计快照事实表进行状态的度量。

2. 快照粒度

  • 快照事实表的粒度通常总是被多维声明,可以简单地理解为快照需要采样的周期以及什么将被采样

  • 在淘宝交易卖家快照事实表中,粒度可以被理解为每天针对卖家的历史截至当日的下单支付金额进行快照。

  • 快照周期不一定按天,也可以按照季度或者来统计。如淘宝交易有针对卖家+类目每月汇总事实表,每月统计一次,同时维度也不仅一个,包含了卖家+类目。

3. 密度与稀疏性

  • 事务事实表是稀疏的,只记录当天发生的业务过程,如下单、支付等;

  • 快照事实表是稠密的,无论当天是否有业务过程发生,都会记录一行,如卖家历史至今的下单和支付金额,无论当天卖家是否有下单支付事实,都会给该卖家记录一行。

4. 半可加性

设计步骤

1. 确定快照事实表的的快照粒度
2. 确定快照事实表采样的状态度量

单维度的每天快照事实表

1. 确定粒度
采样周期为每天,针对卖家、买家、商品、类目、地区等维度的快照事实表,比如淘宝卖家历史至今汇总事实表淘宝商品自然月至今汇总事实表等。

2. 确定状态度量
如淘宝卖家历史至今汇总事实表,包含了历史截至当日的下单金额、历史截至当日的支付金额等度量。

淘宝商品历史至今快照事实表,确定了商品维度和商品状态度量。

混合维度的每天快照事实表

  • 在每天的采样周期上针对多个维度进行采样。

  • 如:如淘宝买卖家历史至今快照事实;采样周期依然是每天,维度是卖家加买家,反映的是不同买家对于不同卖家的下单支付金额。

全量快照事实表

  • 案例:淘宝好中差评快照事实表

1. 确定粒度

  • 淘宝好中差评每天都在变化,下游统计分析也是每天都在进行的,因此确定采样周期是每天

  • 这里的采样维度是针对评价本身,即每天按照评价进行采样,每条好中差评价就是快照事实表的最细粒度。

2. 确定状态度量

  • 对于好中差评价的度量关注更多的是评价本身,没有类似于金额、商品数这样的度量,因此设计为无事实的事实表,更多关注评价的状态

  • 对于全量快照事实表,这里再增加一步,即冗余维度。此如好中差评快照事实表,冗余了子订单维度、商品维度、评论者维度、被评论者维度以及杂项维度,包括评论内容、是否匿名等信息。

注意事项

  1. 事务与快照成对设计:事务事实表和快照事实表成对设计、互相补充,特别是在事务事实表的基础上可以加工快照事实表。即丰富了星型模型,又降低了下游分析的成本。
  2. 附加事实:快照事实表在确定状态度量时,一般都是保存采样周期结束时的状态度量。但是也有分析需求需要关注上一个采样周期结束时的状态度量,而又不愿意多次使用快照事实表,因此一般在设计周期快照事实表时会附加上一个采样周期的状态度量。
  3. 周期到日期度量:在实际应用中,有需要关注自然年至今、季度至今、财年至今的一些状态度量。

累计快照事实表

设计过程(淘宝交易订单的流转过程)

1. 选择业务过程

  • 买家下单、买家支付、卖家发货、买家确认收货业务过程。

2. 确定粒度

  • 淘宝交易事务事实表的粒度是子订单。对于累计快照事实表,用于考察实体的唯一实例,所以子订单在此表中只有一行记录事件发生时,对此实例进行更新*。

3. 确定维度

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

  • 杂项维度:,杂项维度无自然键,一般是枚举值的组合 ,对于每个组合生产一个代理键。但在实际建模中,存在很多非枚举值,且对于每个订单都不相同,如订单的 attributes 和 options 属性。所以实际中杂项维度设计时,也可以直接使用自然键标识具体的维度值

4. 确定事实

  • 比如淘宝交易累积快照事实表,包含了各业务过程对应的事实,如下单对应的下单金额,支付对应的折扣、邮费和支付金额,确认收货对应的金额等。

  • 累积快照事实表解决的最重要的问题是统计不同业务过程之间的时间间隔,建议将每个过程的时间间隔作为事实放在事实表中。

  • 在淘宝交易累积快照事实表建模中,由于每个过程的时间间隔计算逻辑简单,因此并未加人事实表中。

5. 退化维度

  • 在大数据的事实表模型设计中,更多的是考虑提高下游用户的使用效率,降低数据获取的复杂性,减少关联的表数量。

  • 一方面,存储成本降低了,而相比之下 CPU 成本仍然较高;另一方面,在大数据时代,很多维表比事实表还大,如淘宝几十亿的商品、几亿的买家等,在分布式数据仓库系统中,事实表和维表关联的戚本很高。所以在传统的维度模型设计完成之后,在物理实现中将各维度的常用属性退化到事实表中,以大大提高对事实表的过滤查询、统计聚合等操作的效率

特点

1. 数据不断更新

  • 事务事实表记录事务发生 时的状态,对于实体的某一实例不再更新,而累积快照事实表则对实体的某一实例定期更新。

  • 事务事实表对于下单时间、支付时间、确认收货时间会产生多条记录。

  • 对于累计快照事实表,则只有一条记录,针对此记录不断更新。

2. 多业务过程日期

  • 累计快照事实表适用于具有较明确起止时间的短生命周期的实体,如交易订单、物流订单等,对于实体的每一个实例,都会经历从诞生到消亡等一些列步骤。但是,对于商品、用户等具有长生命周期的实体,用周期快照事实表更合适。

  • 累计快照事实表典型特征是多业务过程日期,用于计算业务过程之间的时间间隔。

  • 累计快照事实表,另一个作用是保存全量数据。

  • 对于淘宝交易,需要保留历史截至当前的所有交易数据,其中一种方式是在 ODS 层保留和源系统结构完全相同的数据;但由于使用时需要关联维度,较为麻烦,所以在公共明细层需要保留一份全量数据;淘宝交易累积快照事实表就承担了这样的作用----存放加工后的事实,并将各维度常用属性和订单杂项维度退化到此表中。通常用于数据探查、统计分析、数据挖掘等。

posted @ 2023-11-20 17:28  jsqup  阅读(7)  评论(0编辑  收藏  举报