拉链表的制作案例

39 篇文章 12 订阅
2 篇文章 0 订阅

拉链表的制作

作用:主要处理缓慢变化维的业务场景。(用户表、订单表)

简洁版,比较难理解,节省了两张临时表,适用于维度表,数据量不大的情况。

INSERT overwrite table dwd_dim_user_info_his 
--数据分两批导入到dwd_dim_user_his
--第一批: old + 更新需要变化的old的数据
SELECT 
	--左表和右边关联后,右表中为NULL的是不需要更新的数据,否则且左表的end_date为9999-99-99,需要将次字段更新
	old.id,
	old.name ,
	old.birthday ,
	old.gender ,
	old.email ,
	old.user_level ,
	old.create_time ,
	old.operate_time ,
	old.start_date ,
	if(new.id is null,old.end_date , if(old.end_date ='9999-99-99',date_sub(dt,1),old.end_date ) )
from dwd_dim_user_info_his old
left join
(
SELECT 
	*
from ods_user_info 
where dt='$do_date'
) new
on old.id = new.id
UNION  all
--第二批: ods层同步的新的数据
SELECT 
	*,'9999-99-99' end_date
from ods_user_info 
where dt='$do_date';

基础版,需要创建一张临时表(可以用于事实表,数据量较大,且进行分区的数据。)
第一步需要先选取昨日数据放入dwd_order_info_his表。
在这里插入图片描述
拉链表制作总结:

  1. 选取昨日数据添加开始日期和结束日期作为初始拉链表
  2. 选取新增数据添加开始日期和结束日期
  3. 拿初始拉链表 union all [ 初始拉链表 left join 新增变化数据 ]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值