Hive不支持,存在.如何编写以下查询?

ele*_*bby 10 hadoop hive hiveql

我有两个表A和B,它们都有一个列id.我希望从A中获得不存在于B中的ID.显而易见的方法是:

SELECT id FROM A WHERE id NOT IN (SELECT id FROM B)
Run Code Online (Sandbox Code Playgroud)

不幸的是,Hive不支持in,exists或子查询.有没有办法使用连接实现上述功能?

我想到了以下几点

SELECT A.id FROM A,B WHERE A.id<>B.id
Run Code Online (Sandbox Code Playgroud)

但似乎这将返回整个A,因为B中始终存在一个不等于A中任何id的id.

Cha*_*guy 25

您可以LEFT OUTER JOIN在Hive中执行相同的操作:

SELECT A.id
FROM A
LEFT OUTER JOIN B
ON (B.id = A.id)
WHERE B.id IS null
Run Code Online (Sandbox Code Playgroud)


小智 5

蜂巢似乎支持INNOT INEXISTNOT EXISTS0.13。

select count(*)
from flight a
where not exists(select b.tailnum from plane b where b.tailnum = a.tailnum);
Run Code Online (Sandbox Code Playgroud)

中的子查询,EXIST并且NOT EXISTS应该具有相关的谓词(如b.tailnum = a.tailnum上述示例中的子查询)。有关更多信息,请参阅Wive子句中的Hive Wiki>子查询。