SELECT
說明
Spark 支援 SELECT
陳述式,並符合 ANSI SQL 標準。查詢用於從一個或多個表格中擷取結果集。下列部分說明整體查詢語法,而子部分則涵蓋查詢的不同建構,並附有範例。
語法
[ WITH with_query [ , ... ] ]
select_statement [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select_statement, ... ]
[ ORDER BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ SORT BY { expression [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [ , ... ] } ]
[ CLUSTER BY { expression [ , ... ] } ]
[ DISTRIBUTE BY { expression [, ... ] } ]
[ WINDOW { named_window [ , WINDOW named_window, ... ] } ]
[ LIMIT { ALL | expression } ]
雖然 select_statement
定義為
SELECT [ hints , ... ] [ ALL | DISTINCT ] { [ [ named_expression | regex_column_names ] [ , ... ] | TRANSFORM (...) ] }
FROM { from_item [ , ... ] }
[ PIVOT clause ]
[ UNPIVOT clause ]
[ LATERAL VIEW clause ] [ ... ]
[ WHERE boolean_expression ]
[ GROUP BY expression [ , ... ] ]
[ HAVING boolean_expression ]
參數
-
with_query
指定主查詢區塊之前的 共用表格表達式 (CTE)。這些表格表達式允許在 FROM 子句中稍後參照。這對於在 FROM 子句中抽象出重複的子查詢區塊很有用,並可改善查詢的可讀性。
-
hints
可以指定提示,以協助 Spark 最佳化器做出更好的規劃決策。目前 Spark 支援影響連接策略選擇和資料重新分區的提示。
-
ALL
從關聯中選取所有符合的列,且預設啟用。
-
DISTINCT
從關聯中選取所有符合的列,並在結果中移除重複項後。
-
named_expression
具有指定名稱的表達式。一般而言,它表示一個欄位表達式。
語法:
expression [[AS] alias]
-
from_item
指定查詢的輸入來源。它可以是下列其中之一
-
PIVOT
PIVOT
子句用於資料觀點;我們可以根據特定欄位值取得彙總值。 -
UNPIVOT
UNPIVOT
子句將欄位轉換成列。它是PIVOT
的反向,除了值彙總之外。 -
LATERAL VIEW
LATERAL VIEW
子句與產生器函數(例如EXPLODE
)搭配使用,將產生包含一或多列的虛擬表格。LATERAL VIEW
會將列套用至每個原始輸出列。 -
WHERE
根據提供的謂詞篩選 FROM 子句的結果。
-
GROUP BY
指定用於將列分組的運算式。這與聚合函數(MIN、MAX、COUNT、SUM、AVG 等)搭配使用,根據分組運算式將列分組,並聚合每個群組中的值。當將 FILTER 子句附加到聚合函數時,只有符合條件的列才會傳遞給該函數。
-
HAVING
指定用於篩選 GROUP BY 產生的列的謂詞。HAVING 子句用於在執行分組後篩選列。如果未指定 GROUP BY,則 HAVING 表示沒有分組運算式的 GROUP BY(全域聚合)。
-
ORDER BY
指定查詢完整結果集中列的排序。輸出列會跨分區排序。此參數與
SORT BY
、CLUSTER BY
和DISTRIBUTE BY
互斥,不能一起指定。 -
SORT BY
指定在每個分區中對列排序的順序。此參數與
ORDER BY
和CLUSTER BY
互斥,不能一起指定。 -
CLUSTER BY
指定用於重新分區和排序列的一組運算式。使用此子句的效果與同時使用
DISTRIBUTE BY
和SORT BY
相同。 -
DISTRIBUTE BY
指定用於重新分區結果列的一組運算式。此參數與
ORDER BY
和CLUSTER BY
互斥,不能一起指定。 -
LIMIT
指定陳述式或子查詢可以傳回的最大列數。此子句大多與
ORDER BY
搭配使用,以產生確定性的結果。 -
boolean_expression
指定評估為結果類型
boolean
的任何運算式。可以使用邏輯運算子(AND
、OR
)將兩個或多個運算式組合在一起。 -
expression
指定評估為值的運算式,其中包含一個或多個值、運算子及 SQL 函數的組合。
-
named_window
指定一個或多個來源視窗規格的別名。來源視窗規格可以在查詢中的視窗定義中被參照。
-
regex_column_names
當
spark.sql.parser.quotedRegexColumnNames
為 true 時,在SELECT
陳述式中被引號包圍的識別碼(使用反引號)會被解釋為正規表示法,且SELECT
陳述式可以採用基於正規表示法的欄位規格。例如,以下 SQL 只會採用欄位c
SELECT `(a|b)?+.+` FROM ( SELECT 1 as a, 2 as b, 3 as c )
-
TRANSFORM
指定一個 hive 風格的轉換查詢規格,以透過分岔執行和執行使用者指定的指令或腳本來轉換輸入。