Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射爲一張數據庫表,並提供簡單的sql查詢功能,可以將sql語句轉換爲MapReduce任務進行運行。
最常用的就是多表關聯查詢,主要講解下join、outer join和semi join的具體使用。
join是最簡單的關聯操作,兩邊關聯只取交集。
outer join分爲left outer join、right outer join和full outer join。
left outer join是以左表驅動,右表不存在的key均賦值爲null;
right outer join是以右表驅動,左表不存在的key均賦值爲null;
full outer join全表關聯,將兩表完整的進行笛卡爾積操作,左右表均可賦值爲null。
semi join最主要的使用場景就是解決exist in。
Hive不支持where子句中的子查詢,SQL常用的exist in子句在Hive中是不支持的。
SELECT a.key, a.value
FROM a
WHERE a.key in (SELECT b.key FROM B);
可以改寫爲:
SELECT a.key, a.value
FROM a LEFT OUTER JOIN b ON (a.key = b.key)
WHERE b.key <> NULL;
一個更高效的實現爲:
SELECT a.key, a.value
FROM a LEFT SEMI JOIN b on (a.key = b.key);
left semi join是0.5.0以上版本的特性。