问题背景:拉链表如果有一天的数据错了,比如说到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
可以看见,本质就是过滤数据到回滚日期的前一天。