Hive 中的 Left Join 未返回预期结果

Left Join in Hive is not returning expected results

我有3个table,一个是datetable只包含日期,另外2个有如下数据。

日期table:

表 1:

表 2:

我正在对日期 table 进行左连接,如下所示:

select * from 
(select distinct t.d,
coalesce(tab1.name,tab2.name,"") as name,
coalesce(tab1.id,tab2.id,"") as id,
coalesce(tab1.tgt_cnt,0) as tgt_cnt,
coalesce(tab2.a_cnt,0) as a_cnt,
coalesce(tab2.b_cnt,0) as b_cnt,
coalesce(tab2.c_cnt,0) as v_cnt
from datetable t
LEFT JOIN (select * from table1) tab1 on t.d = tab1.dt
LEFT JOIN (select * from table2) tab2 on t.d = tab2.dt) a
where (tgt_cnt <> 0 or a_cnt <> 0 or b_cnt <> 0 or c_cnt <> 0);

我得到了以下结果。

我的问题是记录 TOM 发生了什么。我不确定为什么 CG 和 Bob 重复两次。我的查询有问题吗?

请问为什么 TOM 记录没有进入 Left Join 以及为什么 CG 和 BOB 重复。

我期待以下结果。

非常感谢您的帮助。

谢谢巴布

coalesce(tab1.name,tab2.name,"") as name会将table2中的名字替换为table1中的名字,所以TOM没有出现,因为它被CG或BOB替换了。

我猜你想在这里实现什么...你似乎想合并 table1 和 table2。我认为完全加入是合适的。

select * from (
select distinct
    coalesce(t1.dt, t2.dt) as dt,
    coalesce(t1.desc, t2.desc) as desc, 
    coalesce(t1.name, t2.name) as name, 
    coalesce(t1.id, t2.id) as id,
    coalesce(t1.tgt_cnt, 0) as tgt_cnt,
    coalesce(t2.a_cnt, 0) as a_cnt,
    coalesce(t2.b_cnt, 0) as b_cnt,
    coalesce(t2.c_cnt, 0) as c_cnt
from table1 t1
full join table2 t2
on t1.name = t2.name and t1.dt = t2.dt
) a
where (tgt_cnt <> 0 or a_cnt <> 0 or b_cnt <> 0 or c_cnt <> 0);

这会给

dt              desc    name    id      tgt_cnt a_cnt   b_cnt   c_cnt
6/29/2020       NULL    Tom     3       0       0       0       1
6/29/2020       AA      CG      1       3       1       1       0
6/29/2020       AA      Bob     2       3       0       0       0