Hue Sparksql - case when & row_number()

该博客介绍了如何在数据导入过程中处理no_sms字段的转换和更新。首先创建了一个视图ods_mbr_sms,从源表中选取每个VIP会员的最新version的no_sms值,转换为1、0或NULL。然后使用MERGE语句更新正式表dwd_csmasa中的数据,只针对status为1的记录且no_sms值不匹配的情况进行更新,确保正式表中的数据与源表同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

数据修复,数据导入只有一个字段为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
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值