我在hive数据库中有五个表(a,b,c,d,e),我必须根据“id”列上的逻辑合并这些表中的数据。
条件是:
Select * from A
UNION
select * from B (except ids not in A)
UNION
select * from C (except ids not in A and B)
UNION
select * from D(except ids not in A,B and C)
UNION
select * from E(except ids not in A,B,C and D)
必须将此数据插入最终表中。
一种方法是在目标表(target)中创建一个表,并为其附加每个联合阶段的数据,然后使用此表与另一个联合阶段进行连接。
这将是我的.hql文件的一部分:
insert into target
(select * from A
UNION
select B.* from
A
RIGHT OUTER JOIN B
on A.id=B.id
where ISNULL(A.id));
INSERT INTO target
select C.* from
target
RIGHT outer JOIN C
ON target.id=C.id
where ISNULL(target.id);
INSERT INTO target
select D.* from
target
RIGHT OUTER JOIN D
ON target.id=D.id
where ISNULL(target.id);
INSERT INTO target
select E.* from
target
RIGHT OUTER JOIN E
ON target.id=E.id
where ISNULL(target.id);
有没有更好的方法来实现这一点?我假设我们无论如何都要做多重连接/查找。我期待着在将来找到实现这一点的最佳方法
1) 泰兹的Hive
2) Sparksql
非常感谢
2条答案
按热度按时间9udxz4iz1#
如果
id
在每个表中是唯一的row_number
可以用来代替rank
.mw3dktmi2#
我想我应该这样做: