hive--join(1)

【问题描述】

使用了join之后,发现同一条记录被复制了很多次。但是明明没有采用笛卡尔积的join方式啊???

举例:

select a.*
from ht_insurance_temp_3_1 a
join (select distinct 
             a.id
             ,a.insurancemonth
             ,count(*)
       from ht_insurance_temp_3_1 a
       join ht_insurance_temp_2 b on a.id = b.id and a.city = '南宁' 
       group by a.id,a.insurance_month
       having count(*) != 1) b on a.id = b.id 
order by a.id,a.insurance_month desc;

我们的目的是查看重复记录的具体情况(某些id的某些月份的记录是重复的,要查看这种重复情况的id的记录情况),结果返回的结果是每条记录都重复了多次,但是原始记录并不是这样的!!!!!

【原因分析】

虽然没有使用笛卡尔积,但是却出现了类似的效果。原因就在于join的键(key)是id,并且join两侧的表的id都有重复,这便导致,出现了笛卡尔积的结果。(就是说右边的id不知道跟左边的哪个id连比较好,那就每个都连一次吧!我感觉我说不明白~~~~)

【解决办法】

使一一对应。

select a.*
from ht_insurance_temp_3_1 a
join (select distinct 
             a.id
             ,a.insurancemonth
             ,count(*)
       from ht_insurance_temp_3_1 a
       join ht_insurance_temp_2 b on a.id = b.id and a.city = '南宁' 
       group by a.id,a.insurance_month
       having count(*) != 1) b on a.id = b.id and a.insurance_month = b.insurance_month   #在这里修改的哈,加了一个束缚条件哈
order by a.id,a.insurance_month desc;
问题解决!

(仅供个人学习,不负责任~~哈哈哈~~~~)

猜你喜欢

转载自blog.csdn.net/august1226/article/details/80581435
今日推荐