[大数据][Hive]关于使用hive left join关联出重复数据的问题解决方法记录


关于使用hive left  join关联出重复数据的问题解决方法记录

问题描述

两张表A表和B表

A表数据结构

ID、名称、其他字段

 

B表数据结构

ID、名称、其他字段

 

需求

需要将B表中ID在A表中存在的数据拿出来分析最终将结果吐出到新表中

我这边分析是用spark分析的。提数据需要用hive sql提。这里我一开始使用的语句是

select b.* from A  a left join B b on a.id=b.id and b.id is not null 

因为我这边只需要对B表的数据进行分析所以只取了b.*

现象

发现最终结果出现非常多的重复数据,而且有的重复有的不重复

原因数据判别

A表中有4条同一ID的重复数据

B表中有4条同一ID的重复数据

结果表中该ID的数据出现了16条

期望结果:

目标表中应该只有B表中的四条数据结果

原因:

在做left join 的时候并不是一对一的。而是一对多。当left join 发生时。每一个ID的每条数据都会join目标表中的所有跟这个ID能关联上的数据。而我这里有4条ID相同的重复数据。也就进行了4次 对B表的该ID的4次JOIN。每一次JOIN都JOIN到4条。所以最终结果便是4*4=16条

解决方法。让关联的A表不对重复ID关联即最终取数据的SQL如下:

select b.* from (select a.id from A a group by a.id) c left join b on c.id=b.id and b.id is not null 

这样取出来的数据就以B表数据为准了。同理如果想保留A表数据那就是对B的ID去重。

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM