Hive 子查詢

1.FROM中的子查詢

SELECT ... FROM (subquery) name ...
SELECT ... FROM (subquery) AS name ...   (Note: Only valid starting with Hive 0.13.0)

Hive僅在FROM子句中支持子查詢(從Hive 0.12版本開始)。必須爲子查詢指定名稱,因爲FROM子句中的每個表都必須具有名稱。子查詢 SELECT 列表中的列必須具有獨一無二的名稱。子查詢 SELECT 列表中的列可以在外部查詢中使用,就像使用表中的列一樣。子查詢也可以是帶 UNION 的查詢表達式。Hive支持任意級別的子查詢。

在Hive 0.13.0及更高版本(HIVE-6519)中可選關鍵字 AS 可以包含的子查詢名稱之前。使用簡單子查詢的示例:

SELECT col
FROM (
  SELECT a+b AS col
  FROM t1
) t2

包含UNION ALL的子查詢示例:

SELECT t3.col
FROM (
  SELECT a+b AS col
  FROM t1
  UNION ALL
  SELECT c+d AS col
  FROM t2
) t3

2. WHERE中的子查詢

從Hive 0.13開始,WHERE子句中支持某些類型的子查詢。可以將這些子查詢的結果視爲 IN 和 NOT IN 語句中的常量(我們也稱這些子查詢爲不相關子查詢,因爲子查詢不引用父查詢中的列)。

SELECT Id, LastName, FirstName, Address, City
FROM Persons
WHERE Id IN ( SELECT PersonId FROM Orders);

也可以支持 EXISTS 和 NOT EXISTS 子查詢:

SELECT *
FROM Persons
WHERE EXISTS ( SELECT * FROM Orders WHERE Orders.PersonId = Persons.Id);

有一些限制:

子查詢僅支持在表達式的右側。
IN/NOT IN 子查詢只能選擇一列。
EXISTS/NOT EXISTS 必須有一個或多個相關謂詞。
對父查詢的引用僅在子查詢的WHERE子句中支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章