【问题标题】:Hive Full Outer Join with 4 Tables on same Key, different schemaHive Full Outer Join 与 4 个表在相同的键上,不同的模式
【发布时间】:2019-08-06 23:27:25
【问题描述】:

我正在尝试在 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;

计数=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 的所有值,以及其他列值?

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

【问题讨论】:

  • 样本数据和期望的结果真的很有帮助。答案似乎是“只需选择您想要的列”。

标签: sql join hive outer-join


【解决方案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);

【讨论】:

  • 我正在为一个 id 返回多行。我正在使用的查询是: select coalesce(f.personid, u.personid, v.personid, v_in.personid) as personid,f.name,u.sal,v.place,v_in.dt from employee1 f FULL OUTER JOIN employee2 u on f.personid=u.personid FULL OUTER JOIN employee3 v on f.personid=v.personid FULL OUTER JOIN employee4 v_in on f.personid=v_in.personid;
猜你喜欢
  • 2019-08-09
  • 2013-06-02
  • 2013-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-17
  • 1970-01-01
相关资源
最近更新 更多