管道作業
適用於: Databricks Runtime 16.2 和之後的版本
使用鏈結作業處理上述 查詢 的結果。
語法
{ SELECT clause |
EXTEND { expression [ [ AS ] column_alias ] } [ , ...] |
SET { column_name = expression } [, ...] |
DROP column_name [, ...] |
AS table_alias |
WHERE clause |
{ LIMIT clause |
OFFSET clause |
LIMIT clause OFFSET clause } |
aggregation |
JOIN clause |
ORDER BY clause |
set_operator |
TABLESAMPLE clause
PIVOT clause
UNPIVOT clause }
aggregation
AGGREGATE aggregate_expr [ [ AS ] column_alias ] [, ...]
[ GROUP BY grouping_expr [AS column_alias ] ]
參數
-
收集要從查詢傳回的欄位,包括表達式的執行和資料去重。
數據行清單不得包含聚合函數。 請為此目的使用
AGGREGATE
運算。 EXTEND
將新的欄位附加至查詢選取清單。
-
結合一或多個值、運算符號和 SQL 函式來計算並返回一個值的組合。
expression
可能包含查詢選取清單中列的參考,以及在此EXTEND
子句中之前的column_alias
。 -
為表達式結果命名的選擇性數據行標識碼。 如果未提供任何
column_alias
,Azure Databricks 會自行產生一個。
-
SET
使用新值覆寫查詢選取清單中的現有數據行。
作業將按照
SET
子句中出現的順序執行。 任何表達式的結果都可以觀察先前表達式所更新的數據行。-
要更新的欄位名稱。 欄位不存在時,Azure Databricks 會引發 UNRESOLVED_COLUMN 錯誤。
表示式
評估為值的一或多個值、運算元和 SQL 函式的組合。
-
DROP column_name [, ...]
從查詢選取清單中移除資料行。
如果數據行不存在,Azure Databricks 會引發 UNRESOLVED_COLUMN 錯誤。
AS table_alias
將名稱指派給查詢的結果。
-
根據提供的述詞篩選查詢的結果。
-
限制查詢可傳回的數據列數目上限。 這個子句通常會遵循 ORDER BY 來產生確定性結果。
-
略過查詢所傳回的一些數據列。 這個子句通常會與 LIMIT 搭配使用,以透過結果集 頁面,並 ORDER BY 產生具決定性的結果。
匯總
根據提供的表達式和選擇性群組表達式,匯總查詢的結果集。
此作業會產生結果集,其中群組數據行會出現在匯總數據行之前。
-
使用聯結來結合兩個或多個關係。 如需詳細資訊,請參閱 JOIN。
-
排序查詢結果集的數據列。 輸出數據列會依分割區排序。 此參數與
SORT BY
、CLUSTER BY
和DISTRIBUTE BY
互斥,而且無法一起指定。 -
使用
UNION
、EXCEPT
或INTERSECT
運算符,將查詢與一或多個子查詢結合。 -
只取樣一小部分的數據列,以減少結果集的大小。
-
用於資料觀點。 您可以根據特定資料行值取得匯總值。 如需詳細資訊,請參閱 PIVOT。
-
用於數據視角。 您可以將多個資料列群組分割成數據列。 如需詳細資訊,請參閱 UNPIVOT。
例子
-- This query
> FROM customer
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%'
|> AGGREGATE COUNT(o_orderkey) c_count
GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist
GROUP BY c_count
|> ORDER BY custdist DESC, c_count DESC;
is equivalent to:
> SELECT c_count, COUNT(*) AS custdist
FROM
(SELECT c_custkey, COUNT(o_orderkey) c_count
FROM customer
LEFT OUTER JOIN orders ON c_custkey = o_custkey
AND o_comment NOT LIKE '%unusual%packages%' GROUP BY c_custkey
) AS c_orders
GROUP BY c_count
ORDER BY custdist DESC, c_count DESC;
-- Using the SELECT clause following a FROM clause
> CREATE TABLE t AS VALUES (0), (1) AS t(col);
> FROM t
|> SELECT col * 2 AS result;
result
------
0
2
-- Adding columns to the result set
> VALUES (0), (1) tab(col)
|> EXTEND col * 2 AS result;
col result
--- ------
0 0
1 2
-- Replacing an expression
> VALUES (0), (1) tab(col)
|> SET col = col * 2;
col
---
0
2
-- Removing a column from the result set
> VALUES (0, 1) tab(col1, col2)
|> DROP col1;
col2
----
1
-- Using a table alias
> VALUES (0, 1) tab(col1, col2)
|> AS new_tab
|> SELECT col1 + col2 FROM new_tab;
col1 + col2
1
-- Filtering the result set
> VALUES (0), (1) tab(col)
|> WHERE col = 1;
col
---
1
-- Using LIMIT to truncate the result
> VALUES (0), (0) tab(col)
|> LIMIT 1;
col
---
0
-- Full-table aggregation
> VALUES (0), (1) tab(col)
|> AGGREGATE COUNT(col) AS count;
count
-----
2
-- Aggregation with grouping
> VALUES (0, 1), (0, 2) tab(col1, col2)
|> AGGREGATE COUNT(col2) AS count GROUP BY col1;
col1 count
---- -----
0 2
-- Using JOINs
> SELECT 0 AS a, 1 AS b
|> AS lhs
|> JOIN VALUES (0, 2) rhs(a, b) ON (lhs.a = rhs.a);
a b c d
--- --- --- ---
0 1 0 2
> VALUES ('apples', 3), ('bananas', 4) t(item, sales)
|> AS produce_sales
|> LEFT JOIN
(SELECT "apples" AS item, 123 AS id) AS produce_data
USING (item)
|> SELECT produce_sales.item, sales, id;
item sales id
--------- ------- ------
apples 3 123
bananas 4 NULL
-- Using ORDER BY
> VALUES (0), (1) tab(col)
|> ORDER BY col DESC;
col
---
1
0
> VALUES (0), (1) tab(a, b)
|> UNION ALL VALUES (2), (3) tab(c, d);
a b
--- ----
0 1
2 3
-- Sampling the result set
> VALUES (0), (0), (0), (0) tab(col)
|> TABLESAMPLE (1 ROWS);
col
---
0
> VALUES (0), (0) tab(col)
|> TABLESAMPLE (100 PERCENT);
col
---
0
0
-- Pivoting a query
> VALUES
("dotNET", 2012, 10000),
("Java", 2012, 20000),
("dotNET", 2012, 5000),
("dotNET", 2013, 48000),
("Java", 2013, 30000)
AS courseSales(course, year, earnings)
|> PIVOT (
SUM(earnings)
FOR COURSE IN ('dotNET', 'Java')
)
year dotNET Java
---- ------ ------
2012 15000 20000
2013 48000 30000
-- Using UNPIVOT
> VALUES
("dotNET", 2012, 10000),
("Java", 2012, 20000),
("dotNET", 2012, 5000),
("dotNET", 2013, 48000),
("Java", 2013, 30000)
AS courseSales(course, year, earnings)
|> UNPIVOT (
earningsYear FOR `year` IN (`2012`, `2013`, `2014`)
course year earnings
-------- ------ --------
Java 2012 20000
Java 2013 30000
dotNET 2012 15000
dotNET 2013 48000
dotNET 2014 22500