離線數倉:用戶拉鏈錶推導過程

1.維度表
維度表有兩類:
1.全量快照表
离线数仓的计算周期通常为每天一次,可以每天保存一份全量的维度数据
优点是:简单有效,开发和维护成本都比较低,方便理解和使用
缺点是:浪费存储空间,尤其是当数据量比较大,而且数据变化比例较低时
2.拉链表
拉链表的意义在于能够更加高效的保存维度信息的历史状态
适用于:数据会发生变化,但是变化频率并不高的维度(缓慢变化维)

2.拉链表的设计过程
用户维度数据:首日数据,2020-06-14
1.直接将ods_user_info_inc数据装载到dwd_user_zip中,加入start_date和end_datez字段,其中start_date设为首日时间,end_date给一个最大的时间
離線數倉:用戶拉鏈錶推導過程_第1张图片
2.对于每日数据 ,举例2020-06-15,依旧是加上start_date和end_date
離線數倉:用戶拉鏈錶推導過程_第2张图片
3.将1和2的情况整合
離線數倉:用戶拉鏈錶推導過程_第3张图片
我们希望得到的数据是
離線數倉:用戶拉鏈錶推導過程_第4张图片
即,如果1和2都有数据,那么说明是有过期数据
方案一:使用full join
離線數倉:用戶拉鏈錶推導過程_第5张图片
对于9999-12-31分区数据,我们优先取new数据,如果没有,则取old分区

離線數倉:用戶拉鏈錶推導過程_第6张图片

对于过期数据,则是表示old和new都有数据,取old数据,把start_date和end_date设置为失效日期
離線數倉:用戶拉鏈錶推導過程_第7张图片
方案二
(1)把old和new进行union
離線數倉:用戶拉鏈錶推導過程_第8张图片
(2)进行排序
離線數倉:用戶拉鏈錶推導過程_第9张图片
(3)9999-12-31分区取第一条数据
離線數倉:用戶拉鏈錶推導過程_第10张图片
(4)2020-06-14取rn=2对应数据
離線數倉:用戶拉鏈錶推導過程_第11张图片

你可能感兴趣的:(HQL,离线数仓,拉链表)