离线数仓—DWD层周期快照事实表实现
前言
前面完成了所有事务型事实表的设计,下面进行DWD层唯一一张周期型快照事实表的设计。
一、周期型快照事实表回顾
1.周期型快照事实表概述
周期快照事实表以具有规律性的、可预见的时间间隔来记录事实(记录的不是明细数据),主要用于分析一些存量型(例如商品库存,账户余额)或者状态型(空气温度,行驶速度)指标。
对于商品库存、账户余额这些存量型指标,业务系统中通常就会计算并保存最新结果,所以定期同步一份全量数据到数据仓库,构建周期型快照事实表,就能轻松应对此类统计需求,而无需再对事务型事实表中大量的历史记录进行聚合了。
对于空气温度、行驶速度这些状态型指标,由于它们的值往往是连续的,我们无法捕获其变动的原子事务操作,所以无法使用事务型事实表统计此类需求。而只能定期对其进行采样,构建周期型快照事实表。
使用场景:对于需要大量数据聚合得出结果的数据,而业务数据库中会保存最新结果的数据,可以采用周期快照事实表。
二、交易域购物车周期快照事实表
1.建表原因
这里是因为后面的需求导致需要统计每个用户购物车中每个商品的库存量。
在ODS层中有一张购物车的增量表也有一张购物车的全量表,这里可以解释出原因:如果只有一张购物车的增量表,如果要统计截至当天每个用户每个商品的库存量,需要查找多个分区的数据,比较麻烦。所以在ODS层有一张购物车的全量表,方便这里周期快照事实表的使用。
2.建表语句
DROP TABLE IF EXISTS dwd_trade_cart_full;
CREATE EXTERNAL TABLE dwd_trade_cart_full
(
`id` STRING COMMENT '编号',
`user_id` STRING COMMENT '用户id',
`sku_id` STRING COMMENT '商品id',
`sku_name` STRING COMMENT '商品名称',
`sku_num` BIGINT COMMENT '加购物车件数'
) COMMENT '交易域购物车周期快照事实表'
PARTITIONED BY (`dt` STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS ORC
LOCATION '/warehouse/gmall/dwd/dwd_trade_cart_full/'
TBLPROPERTIES ('orc.compress' = 'snappy');
3.数据装载语句
这里首日数据装载和每日数据装载都一样,因为是从ODS层的购物车全量表拿的当天的数据。
insert overwrite table dwd_trade_cart_full partition(dt='2020-06-14')
select
id,
user_id,
sku_id,
sku_name,
sku_num
from ods_cart_info_full
where dt='2020-06-14'
and is_ordered='0';
装载语句说明:
业务系统中在提交订单后,正常情况下购物车里的数据要消失,这里没有消失,而是用一个字段进行了标记,所以要通过根据字段的值判断是否还在购物车里。
例如有如下需求:

如果要算这个需求,不建立购物车周期快照事实表,那就需要加购物车事务事实表和减购物车事务事实表这两张表去算,还要进行join,很麻烦。如果建立了购物车周期快照事实表,可以直接去算,很方便。
DWD层购物车周期快照事实表设计与实现
本文介绍了数据仓库DWD层中周期快照事实表的概念,特别是针对交易域购物车的快照表设计。通过构建此类表,可以简化统计每个用户购物车商品库存的复杂性,避免对事务型事实表的大量聚合操作。文章详细讨论了建表原因、建表语句和数据装载过程,并举例说明了周期快照事实表在解决特定业务需求时的优势。
138

被折叠的 条评论
为什么被折叠?



