パイプ操作
適用対象: 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
クエリ選択リストに新しい列を追加します。
-
値に評価される 1 つ以上の値、演算子、および SQL 関数の組み合わせ。
expression
には、クエリ選択リスト内の列への参照と、このEXTEND
句の前のcolumn_alias
が含まれている場合があります。 -
式の結果に名前を付ける省略可能な列識別子。
column_alias
が指定されていない場合、Azure Databricks がcolumn_alias
を自動的に生成します。
-
SET
クエリ選択リストの既存の列を新しい値でオーバーライドします。
操作は、
SET
句の外観の順序で実行されます。 式の結果は、先行する式によって更新された列を参照できます。-
更新する列の名前。 列が存在しない場合、Azure Databricks が UNRESOLVED_COLUMN エラーを発生させます。
式
値に評価される 1 つ以上の値、演算子、および SQL 関数の組み合わせ。
-
DROP column_name [, …]
クエリ選択リストから列を削除します。
列が存在しない場合、Azure Databricks から UNRESOLVED_COLUMN エラーが発生します。
AS table_alias
クエリの結果に名前を割り当てます。
-
指定された述語に基づいてクエリの結果をフィルター処理します。
-
クエリによって返される行の最大数を制限します。 この句は、通常、決定論的な結果を生成する ORDER BY に従います。
-
クエリによって返される行の数をスキップします。 この句は一般的に、LIMIT と組み合わせて使用して結果セットを "ページング" し、ORDER BY と組み合わせて使用して決定論的な結果を生成します。
集計
指定された式とオプションのグループ化式に基づいて、クエリの結果セットを集計します。
この操作により、集計列の前にグループ化列が表示される結果セットが生成されます。
AGGREGATE
集計する式を指定します。
-
1 つ以上の集計関数を含む式。 詳細については、GROUP BY を参照してください。
-
GROUP BY
行をグループ化する式を指定します。 指定しない場合、すべての行は 1 つのグループとして扱われます。
-
式の結果に名前を付ける省略可能な列識別子。
column_alias
が指定されていない場合、Azure Databricks によってそれが派生されます。
-
結合を使用して 2 つ以上の関係を結合します。 詳細については、JOIN を参照してください。
-
クエリの結果セットの行を並べ替える。 出力行はパーティション間で並べ替えられます。 このパラメーターは、
SORT BY
、CLUSTER BY
、およびDISTRIBUTE BY
と相互に排他的であり、一緒に指定することはできません。 -
UNION
、EXCEPT
、またはINTERSECT
演算子を使用して、クエリを 1 つ以上のサブクエリと組み合わせます。 -
行の一部のみをサンプリングすることによって、結果セットのサイズを小さくします。
-
データ視点で利用されます。 特定の列の値に基づいて集計値を取得できます。 詳細については、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