Hive 两张表数据验证方案、两张大表如何进行数据验证以及剔除部分字段进行数据验证

本文介绍了一种在测试环境中对宽表数据进行验证的方法。通过union两张表后group by检查数据差异,并针对concat_ws字段顺序问题提出了解决方案。利用Hive SQL进行数据验证,确保测试数据与线上数据的一致性。

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

  最近的问题是,宽表在上线之前,需要在测试环境进行试跑,试跑结束后如何跟线上正式数据进行比对呢?简单记录一下设计方案。

  1、小表数据验证

        一些字段比较少的表进行数据验证的方案之前出过

Hive 数据模型切换后的数据验证方案_小菜菜1223的博客-优快云博客

select * from (
    select contr_no
    ,user_id
    ,unique_id
    ,if_open_cooperator
    from test.a
    where dt='20220908'
) a
join (
    select contra_no
    ,usr_id
    ,prod_cd
    ,if_open_cooperator
    from test.b
    where dt='20220908'
) b
on a.contr_no=b.contra_no
where (
    coalesce(a.if_open_cooperator,'')!=coalesce(b.if_open_cooperator,'')
)
;

2、宽表数据验证

  本次宽表数据验证我想得方法是讲两张表的数据进行union,然后group by 一下查看是否有!=1的数据,这样就能检测出数据有无差异。

  

select usr_id from (
select * from data_mart_tmp.cust_info_five_lgy_test
union
select * from data_mart_tmp.cust_info_five_lgy_test_2
)a
group by usr_id
having count(*)!=1;

  本次宽表的痛点是,如果数据中包含了concat_ws组合出来的数据,本来两条数据是正确的,但是concat_ws的字段数据存在了顺序问题,这样怎么解决呢?

  思路就是:

  一般concat_ws的字段会比较少,我们可以把这几个字段不进行比较或单独比较,那么在一个几百字段的表格中,如何把剩余的字段拿出来比较呢?

  还好Hive支持了这种功能

  利用正则将不需要的字段过滤出去不取即可了

set hive.support.quoted.identifiers=none;
select usr_id from (
select `(his_coop_of_withdrawal|source_of_valid_contra)?+.+` from dmp.dm_dmp_cust_info where dt='20221010' 
union
select `(his_coop_of_withdrawal|source_of_valid_contra)?+.+` from dmp.dm_dmp_cust_info_test where dt='20221010' 
) a 
group by usr_id
having count(*)!=1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值