0%

hive中的in和not in

hive中无法像postgresql和mysql一样使用in 和 not in 语句,类似的功能实现需要借助left join。

##in 语句的实现
in语句的实现需要借助LEFT SEMI JOIN 语句

原有使用in的语句为:

1
2
3
4
5
SELECT a.key, a.value
FROM a
WHERE a.key in
(SELECT b.key
FROM B);

在Hive中需要修改为:

1
2
SELECT a.key, a.val
FROM a LEFT SEMI JOIN b on (a.key = b.key)

##not in 语句的实现

原有使用not in的语句为:

1
2
3
4
5
SELECT a.key, a.value
FROM a
WHERE a.key not in
(SELECT b.key
FROM B);

在hive中需要使用LEFT OUTER JOIN加一个判断来间接实现

1
2
3
4
5
6
7
SELECT t1.key
FROM
(SELECT key FROM a) t1
LEFT OUTER JOIN
(SELECT key FROM b) t2
ON (t1.key = t2.key)
WHERE t2.key is null
如果我的文字帮到了您,那么可不可以请我喝罐可乐?