Hive學習之Union和子查詢


Union的語法格式如下:

select_statement UNION ALL select_statement UNION ALL select_statement ... 

Union用於將多個SELECT語句的查詢結果合並到一個結果集中,目前Hive只支持UNION ALL,也就是結果集中的重復記錄不會被刪除。SELECT語句返回列的數目和名稱必須相同,否則會報schema錯誤。Union語句還可以嵌套在FROM子句中:

SELECT *  
FROM (  
  select_statement  
  UNION ALL  
  select_statement  
) unionResult  

    在Hive-0.12.0及之前的版本中,Union只能在子查詢中使用,在Hive-0.13.0版本中,去除了該限制,Union查詢可以作為獨立的查詢使用

    看過了Union后,現在來看看子查詢。在Hive-0.12.0及之前的版本中子查詢只能出現在FROM子句中,且必須給定一個名稱,因為每個在FROM子句中的表必須擁有名稱。子查詢中的列必須有唯一的名稱,子查詢中的列在外部查詢中可以像表中的列那樣使用,子查詢也可以是Union查詢,Hive支持任意層的子查詢。具體語法如下:

SELECT ... FROM (subquery) name ...  
SELECT ... FROM (subquery) AS name ... //AS關鍵字是在Hive-0.13.0中引入的  

下面是包含Union all子查詢的例子:

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

從Hive-0.13.0開始,某些類型的子查詢可以出現在WHERE子句中,這些子查詢的結果可以被IN、NOT IN、EXISTS和NOT EXISTS語句當做常量,也稱為不相關查詢,因為子查詢不引用父查詢的列。下面是兩個例子:

SELECT *  
FROM A  
WHERE A.a IN (SELECT foo FROM B);   
  
SELECT A  
FROM T1  
WHERE EXISTS (SELECT B FROM T2 WHERE T1.X = T2.Y)  

 子查詢的一些限制總結如下:

  • 子查詢只能出現在表達式的右側
  • IN/NOT IN的子查詢中只允許選擇一列
  • EXISTS/NOT EXISTS必須有一個或者多個相關謂詞
  •  對父查詢的引用只能出現在子查詢的WHERE子句中

轉自:http://blog.csdn.net/skywalker_only/article/details/39294183

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM