蜂巢完全外部联接与相同的密钥4个表,不同的模式(Hive Full Outer Join with

2019-10-28 20:41发布

我试图做全外连接4个蜂房表。 连接键是一样的,但是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;

数= 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;

数= 2787037

如何从4桌ID的所有值一列,其他列的值一起?

是否有更好的方法来做到这一点?

Answer 1:

你应该只选择你想要的列。 我想你想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() S:

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);


文章来源: Hive Full Outer Join with 4 Tables on same Key, different schema