天天看點

hive 的 left semi join 講解

介紹

LEFT SEMI JOIN (左半連接配接)是 IN/EXISTS 子查詢的一種更高效的實作。

Hive 目前沒有實作 IN/EXISTS 子查詢,是以可以用 LEFT SEMI JOIN 重寫你的子查詢語句。

示例

可以改寫為

特點

1、left semi join 的限制是, JOIN 子句中右邊的表隻能在 ON 子句中設定過濾條件,在 WHERE 子句、SELECT 子句或其他地方過濾都不行。

2、left semi join 是隻傳遞表的 join key 給 map 階段,是以left semi join 中最後 select 的結果隻許出現左表。

3、因為 left semi join 是 in(keySet) 的關系,遇到右表重複記錄,左表會跳過,而 join 則會一直周遊。這就導緻右表有重複值得情況下 left semi join 隻産生一條,join 會産生多條,也會導緻 left semi join 的性能更高。 

比如以下A表和B表進行 join 或 left semi join,然後 select 出所有字段,結果差別如下:

注意:藍色叉的那一列實際是不存在left semi join中的,因為最後 select 的結果隻許出現左表。

繼續閱讀