《全链路数据治理-智能数据建模 》——数仓建模理论与规范(7) https://developer.aliyun.com/article/1231078?groupCode=tech_library
c) 多事务事实表
淘宝多事务事实表:dwd_tb_trd_ord_ent_di
基本特征
业务过程:订单创建→支付→完结
事实表类型:多事务事实表
粒度:子订单ID
度量:订单创建金额、支付金额等
冗余属性:冗余商品、会员属性
数据存储:仅插入不更新,每个分区存储每个实体的最新业务过程状态,通常以打标方式标识其业务过程(如表中的“是否当天下单”、“是否当天支付”、“是否当天确认收货”),每个实体因其业务过程更新情况,在整张表可能有多条记录
适用场景
适合一次分析多个业务过程的场景
此场景下计算存储相比单事务节约、取数更便捷
举例:查询20220110 当天下单当天支付的订单
select * from tbcdm.dwd_tb_trd_ord_ent_di where ds = '20220110' and
is_create = 'Y' and is_pay= 'Y'
d) 累积快照事实表
订单全流程表:dwd_tb_trd_ord_flow_di
基本特征
业务过程:订单创建->支付->完结
事实表类型:累积快照事实表
粒度:子订单ID
度量:订单创建金额、支付金额等
冗余属性:冗余商品、会员属性
数据存储:
每日更新,存储每个实体的最新状态,每个实体在整张表中仅有一条记录每天完成的订单存储在当天日期的分区,而未完成的订单统一存储在300001231 分区
适用场景
多个业务过程,联合分析,如下单到支付、支付到订单完结时长的分析
保存全量数据、常见于订单处理
举例:近7 天支付订单从下单到支付平均时长
select sum ( pay_time-create_time ) /count ( order_id ) from
tbcdm.dwd_tb_trd_ord_flow_di where pay_time>${bizdate-7} and
(ds>${bizdate-7} or ds= '30001231')
e) 周期型快照事实表
设计流程
基本原则
• 数据公用性
汇总层的产出是否有多个下游使用
维度的聚集是否有多个下游用于分析等
高内聚低耦合:dws 层不跨域计算存储
可扩展性:区分统计周期,如果要拆分,需要按照原子周期去拆分到多个
dws
命名规则
dws_{业务BU 缩写/pub}_{数据域缩写}_{数据粒度缩写}[_{自定义表命名标签缩写}]_{统计时间周期范围缩写}
比如:dws_tb_itm_slr_td(商品域商家粒度汇总表)
tb:业务域
itm:数据域
slr:统计粒度
td:时间周期(截至当天为止)
最佳实践
以淘系事实表商家粒度商品汇总表和其中冗余维度店铺维度为例来介绍:
商家粒度商品汇总表:dws_tb_itm_slr_td
基本特征
粒度:商家ID
指标:历史截至当日商品数等
业务周期:每日
物理表类型:周期快照事实表
冗余维度:店铺ID
数据存储:每日更新,每个分区存储每个
实体的最新状态
适用场景
时间周期跨度比较大,实体的当前状态
不需要每次读时从事务事实再计算
举例:该商家历史截至当日共上线的商品数
Select itm_cnt_std from tbcdm.dws_tb_itm_slr_td where ds=‘${bizdate}’