LEFT SEMI JOIN 是 IN/EXISTS 子查詢的一種更高效的實現。code
Hive 當前沒有實現 IN/EXISTS 子查詢,因此你能夠用 LEFT SEMI JOIN 重寫你的子查詢語句。LEFT SEMI JOIN 的限制是, JOIN 子句中右邊的表只能在 查詢
ON 子句中設置過濾條件,在 WHERE 子句、SELECT 子句或其餘地方過濾都不行。co
SELECT a.key, a.value FROM a WHERE a.key in (SELECT b.key FROM B);
能夠被重寫爲:
SELECT a.key, a.val FROM a LEFT SEMI JOIN b on (a.key = b.key)