解决数据发散的问题

解决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表中粒度不是最小值,说明关联条件没有取对,要增加关联字段,有时候,粒度需要对业务比较熟悉的人才知道,如果不知道最细粒度是什么,要联系表的开发者或者向其他人去问

你可能感兴趣的:(笔记)