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

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

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

在这里插入图片描述

对于过期数据,则是表示old和new都有数据,取old数据,把start_date和end_date设置为失效日期
在这里插入图片描述
方案二
(1)把old和new进行union
在这里插入图片描述
(2)进行排序
在这里插入图片描述
(3)9999-12-31分区取第一条数据
在这里插入图片描述
(4)2020-06-14取rn=2对应数据
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37759590/article/details/132851942
今日推荐