新增两个字段 :start_dt生效时间,end_dt失效时间
end_dt='9999-12-31’记录该条记录当前处于有效状态
举个栗子
2021-08-25新增三笔待支付订单,此时三比订单的开始时间和结束时间分别是:2021-08-25 、9999-12-31
2021-08-26第二笔订单完成了支付,那么我们需要执行的操作有两个:
insert overwrite table dwd.order_info partition(date_id='2021-08-16')
select
t1.order_id
,t1.order_status
,t1.create_time
,t1.update_time
,t1.start_dt
,case when t1.end_dt='9999-12-31' and t2.order_id is not null then t1.date_id else t1.end_dt end as end_dt
from
dwd.order_info t1
left join ods.order_info_20210816 t2
on t1.order_id = t2.order_id
where t1.date_id='2021-08-15'
union all
select
t1.order_id
,t1.order_status
,t1.create_time
,t1.update_time
,to_date(update_time) as start_dt
,'9999-12-31' as end_dt
from ods.order_info_20210816 t1
数据回滚到错误数据的前一天,然后重跑相关任务及下游数据