背景
数据修复,数据导入只有一个字段为no_sms,值传入Y,N, NULL; 存入正式表no_sms值为1,0, NULL;
数据有可能会被导入多次,以version字段区分,我们需要根据一个字段vip取最后一次导入的version;
解决
--导入源表中取最新一次version的no_sms转换后的字段值;
create or replace view ods_mbr_sms as
select vip,
case when no_sms='Y' then 1 when no_sms='N' then 0 when no_sms=NULL then NULL end no_sms
from (select vip,
no_sms,
row_number() over(partition by vip order by version desc) rnk
from ods_mbr
) t
where rnk =1
--更新正式表的数据;
merge into dwd_csm as a
using ods_mbr_sms b
on a.vip = b.vip
where a.status=1
and a.no_sms <>b.no_sms and b.no_sms is not null
when matched
then update set a.no_sms = b.no_sms