hive select操作(翻譯自Hive wiki)


Select語法

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[CLUSTER BY col_list
  | [DISTRIBUTE BY col_list] [SORT BY col_list]
]
[LIMIT number]

select語句可以是union查詢的一部分或者是另一個查詢的子查詢。

table_reference指示查詢的輸入。它可以是普通的表,視圖,join構造或者是子查詢。

簡單查詢。例如,下面的查詢返回表t1所有的列和行。

SELECT * FROM t1

 

WHERE子句

where條件是一個boolean表達式。例如,下面的查詢,返回US地區,amount大於10的銷售記錄。Hive在where子句中不支持IN,EXISTS或子查詢

SELECT * FROM sales WHERE amount > 10 AND region = "US"

 

ALL和DISTINCT子句

ALL和DISTINCT選項,指定重復的行是否返回。如果沒有指定,默認是ALL(所有行會返回)。DISTINCT指定從結果集移除重復的行。

hive> SELECT col1, col2 FROM t1
    1 3
    1 3
    1 4
    2 5
hive> SELECT DISTINCT col1, col2 FROM t1
    1 3
    1 4
    2 5
hive> SELECT DISTINCT col1 FROM t1
    1
    2

 



基於分區的查詢

通常,一個SELECT查詢掃描全部表(除了sampling)。如果表是用PARTITIONED BY字句創建,查詢可以做分區剪除,根據查詢指定的分區范圍,掃描表的一部分。當前Hive在where字句或者JOIN的ON字句中指定了分區,會做分區裁剪。例如,如果表page_views按照列date做分區,下面的查詢,只是返回在2008-03-01到2008-03-31的日期的行。

    SELECT page_views.*
    FROM page_views
    WHERE page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31'

 

如果表page_views和其他表dim_users做連接,可以在ON字句指定分區的范圍,如下:

    SELECT page_views.*
    FROM page_views JOIN dim_users
      ON (page_views.user_id = dim_users.id AND page_views.date >= '2008-03-01' AND page_views.date <= '2008-03-31')

 

HAVING子句

從Hive0.70開始,Hive添加支持HAVING字句。之前的Hive版本,如果要達到相同的效果,需要用子查詢,例如:

SELECT col1 FROM t1 GROUP BY col1 HAVING SUM(col2) > 10

 

也可以表示為:

SELECT col1 FROM (SELECT col1, SUM(col2) AS col2sum FROM t1 GROUP BY col1) t2 WHERE t2.col2sum > 10

 

LIMIT字句

Limit指示返回的行的數目。隨機選擇返回的行。下面的查詢,隨機返回t1的5行。

SELECT * FROM t1 LIMIT 5

 

Top K查詢。下面的查詢返回的前5名的銷售記錄WRT量。

SET mapred.reduce.tasks = 1
SELECT * FROM sales SORT BY amount DESC LIMIT 5

 

正則表達式列規范

SELECT語句可以執行基於正則表達式的列規范

使用java正則表達式語法:常用http://www.fileformat.info/tool/regex.htm測試結果。

下面的查詢,選擇除了ds和hr的所有列。

SELECT `(ds|hr)?+.+` FROM sales

 

翻譯自 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select


免責聲明!

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



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