数据仓库拉链表回滚实现及本质

514 阅读1分钟

问题背景:拉链表如果有一天的数据错了,比如说到12月15号,但是发现11月10号拉链的数据错了,导致后续拉链的结果都错了,这个应该怎么修正拉链表的回滚问题?

希望大家可以关注下公众号,支持一下,鞠躬感谢~
在这里插入图片描述

修正拉链表回滚问题本质就是:
其实目的就是找到历史的快照。
历史的快照可以根据起始更新时间,那你就找endtime小于你出错的数据就行了,出错日期的数据就行了。
重新导入数据,将原始拉链表数据过滤到指定日期之前即可。
举例:
拉链表dwd_userinfo_db,目前时间是2020-12-15,想回滚到2020-11-27,那么拉链表的状态得是2020-11-26

userid		starttime		endtime
1			2020-11-12		2020-11-26
1			2020-11-27		9999-99-99
2			2020-11-16		2020-12-13
2			2020-12-14		9999-99-99

拉链表回滚:过滤starttime<=2020-11-26的数据,将endtime>=2020-11-26的修改为9999-99-99

insert overwrite table dwd_userinfo_db
select
	userid,
	starttime,
	if(endtime>=2020-11-26,'9999-99-99',endtime)
from dwd_userinfo_db
where starttime<=2020-11-26

可以看见,本质就是过滤数据到回滚日期的前一天。