我正在尝试对4个Hive表进行完全外部联接。 JOIN键相同,但是4个表的架构不同。 我想为4个表中存在的所有ID生成所有列值。 但是id列应该只包含一次所有值,而不能出现4次(每次来自一个表)
查询1
select count(*)
from table1 f FULL OUTER JOIN table2 u on f.id=u.id
FULL OUTER JOIN table3 v on f.id=v.id
FULL OUTER JOIN table4 v_in on f.id=v_in.id;
Count = 2787037
查询2
select count(*)
from table1 f FULL OUTER JOIN table2 u on f.id=u.id
FULL OUTER JOIN table3 v on f.id=v.id
FULL OUTER JOIN table4 v_in on f.id=v_in.id
group by f.id,u.id,v.id,v_in.id, f.name, f.amt, f.add, u.dt, u.ts, v.ea,v.rd,
v_in.c1,v_in.c2,v_in.c3,v_in.c4,v_in.c5;
Count = 2787037
如何从一列中的4个表中生成所有ID值以及其他列值?
有更好的方法吗?
答案 0 :(得分:0)
您应该只选择所需的列。我认为您想要coalesce()
:
select coalesce(f.id, u.id, v.id, v_in.id) as id,
f.name, f.amt, f.add, u.dt, u.ts, v.ea, v.rd,
v_in.c1, v_in.c2, v_in.c3, v_in.c4, v_in.c5
from . . .;
使用full outer join
,您需要许多coalesce()
:
select . . .
from table1 f full join
table2 u
on f.id = u.id full join
table3 v
on v.id in (f.id, u.id) full join
table4 v_in
on v_in.id in (f.id, u.id, v.id);