解决数据发散的问题

解决hive表数据发散的问题

笔者在sqoop将hive表推送数据到pg库出现数据发散的情况,
过程简述:建立临时表C,将表A left join 表B的数据抽取到临表C,使用sqoop,推送到 pg库(关系型数据库),验数时发现推送过去的数据异常。有发散(数据重复)的情况。
首先定位发散原因:
(1)检测临时表C的数据是否异常,
如果数据正常,说明在推送过程中出现了异常,检查sqoop推送过程中的参数设置是否异常,比如说需要每次推送导入pg库,需要用sqoop上删除上一次导入的的数据,但是参数时间设置错误,未能执行。
(2)如果表C数据发散,那就是代码逻辑存在错误。
接下来分析代码问题
数据发散,一般可能是两种情况:
第一种,数据源表就存在数据发散的问题,这时你需要找到源表的负责人解决问题
第二种,我们 A left join B 的时候,使用主键的关联条件中,没有关联到表B的最小粒度。
具体方法如下(这里我们假设id为主健,dt表示当日的分区)

select  id,count(1) ct from C where dt = '2020-11-05'  group by id having ct > 1

通过该sql计算出发散的具体值,发现 id 值1101出现发散
那么我们分别在表A和表B中查找id 1101

select  id from A where id =1101
select  id from B where id= 1101

如果在A表或者B表中发现数据有重复,说明数据有重复,如果发现B表中粒度不是最小值,说明关联条件没有取对,要增加关联字段,有时候,粒度需要对业务比较熟悉的人才知道,如果不知道最细粒度是什么,要联系表的开发者或者向其他人去问

  • 2
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值