拉链表
insert overwrite table ods_lalian
select id
,a_score
,b_score
,c_score
,d_score
,creator
,create_time
,start_date
,end_date
,row_number()over(partition by id order by create_time desc ) as order_flag
,load_time
from (
select nvl(t1.id,t2.id) as id
,nvl(t1.a_score ,t2.a_score ) as a_score
,nvl(t1.creator ,t2.creator ) as creator
,nvl(t1.create_time,t2.create_time) as create_time
,case when t2.id is null then t1.create_time
when t1.id is null then t2.create_time
end as start_date
,case when t2.id is null then '2099-12-31 00:00:00'
when t1.id is null and t2.end_date = '2099-12-31 00:00:00' then from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')
when t1.id is null and t2.end_date <> '2099-12-31 00:00:00' then t2.end_date
end as end_date
,from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as load_time
from ods_data1 as t1
full join (select *
from ods_lalian
where order_flag = 1
)as t2
on t1.id = t2.id
where t1.id is null
or t2.id is null
union all
select t2.id
,t2.a_score
,t2.creator
,t2.create_time
,case when t1.create_time = t2.create_time then t2.start_date
when t1.create_time <> t2.create_time then t2.start_date
end as start_date
,case when t1.create_time = t2.create_time then t2.end_date
when t1.create_time <> t2.create_time then t1.create_time
end as end_date
,case when t1.create_time = t2.create_time then t2.load_time
when t1.create_time <> t2.create_time
then from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss')
end as load_time
from ods_data1 as t1
inner join (select *
from ods_lalian
where order_flag = 1
)as t2
on t1.id = t2.id
union all
select t2.id
,t1.a_score
,t1.creator
,t1.create_time
,t1.create_time as start_date
,'2099-12-31 00:00:00' as end_date
,from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss') as load_time
from ods_data1 as t1
inner join (select *
from ods_lalian
where order_flag = 1
)as t2
on t1.id = t2.id
where t1.create_time <> t2.create_time
union all
select * from ods_lalian
where order_flag > 1
) as t
;