次の方法で共有


パイプ操作

適用対象: 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 ] ]

パラメーター

  • SELECT 句

    式の実行や重複除去など、クエリから返される列を収集します。

    列リストに集計関数を含めてはなりません。 その目的に AGGREGATE 操作を使用します。

  • EXTEND

    クエリ選択リストに新しい列を追加します。

    • expression

      値に評価される 1 つ以上の値、演算子、および SQL 関数の組み合わせ。

      expression には、クエリ選択リスト内の列への参照と、この EXTEND 句の前の column_alias が含まれている場合があります。

    • column_alias

      式の結果に名前を付ける省略可能な列識別子。 column_alias が指定されていない場合、Azure Databricks が column_alias を自動的に生成します。

  • SET

    クエリ選択リストの既存の列を新しい値でオーバーライドします。

    操作は、SET 句の外観の順序で実行されます。 式の結果は、先行する式によって更新された列を参照できます。

    • column_name

      更新する列の名前。 列が存在しない場合、Azure Databricks が UNRESOLVED_COLUMN エラーを発生させます。

    • 値に評価される 1 つ以上の値、演算子、および SQL 関数の組み合わせ。

  • DROP column_name [, …]

    クエリ選択リストから列を削除します。

    列が存在しない場合、Azure Databricks から UNRESOLVED_COLUMN エラーが発生します。

  • AS table_alias

    クエリの結果に名前を割り当てます。

  • WHERE

    指定された述語に基づいてクエリの結果をフィルター処理します。

  • LIMIT

    クエリによって返される行の最大数を制限します。 この句は、通常、決定論的な結果を生成する ORDER BY に従います。

  • OFFSET

    クエリによって返される行の数をスキップします。 この句は一般的に、LIMIT と組み合わせて使用して結果セットを "ページング" し、ORDER BY と組み合わせて使用して決定論的な結果を生成します。

    手記

    LIMIT および OFFSET を使用して結果セットをページングするとき、スキップされた行を含むすべての行が処理されます。 ただし、結果セットには、指定された行のサブセットのみが返されます。 この手法を使用した改ページは、リソースを集中的に使用するクエリでは推奨されません。

  • 集計

    指定された式とオプションのグループ化式に基づいて、クエリの結果セットを集計します。

    この操作により、集計列の前にグループ化列が表示される結果セットが生成されます。

    • AGGREGATE

      集計する式を指定します。

      • aggregate_expr

        1 つ以上の集計関数を含む式。 詳細については、GROUP BY を参照してください。

    • GROUP BY

      行をグループ化する式を指定します。 指定しない場合、すべての行は 1 つのグループとして扱われます。

      • grouping_expr

        グループ化列を識別する式。 詳細については、GROUP BY を参照してください。

        ジェネリック GROUP BY 句とは異なり、整数の数値は、生成された結果セットではなく、入力を提供するクエリ内の列を識別します。

    • column_alias

      式の結果に名前を付ける省略可能な列識別子。 column_alias が指定されていない場合、Azure Databricks によってそれが派生されます。

  • JOIN

    結合を使用して 2 つ以上の関係を結合します。 詳細については、JOIN を参照してください。

  • ORDER BY

    クエリの結果セットの行を並べ替える。 出力行はパーティション間で並べ替えられます。 このパラメーターは、SORT BYCLUSTER BY、および DISTRIBUTE BY と相互に排他的であり、一緒に指定することはできません。

  • set_operator

    UNIONEXCEPT、または INTERSECT 演算子を使用して、クエリを 1 つ以上のサブクエリと組み合わせます。

  • TABLESAMPLE

    行の一部のみをサンプリングすることによって、結果セットのサイズを小さくします。

  • PIVOT

    データ視点で利用されます。 特定の列の値に基づいて集計値を取得できます。 詳細については、PIVOT を参照してください。

  • UNPIVOT

    データ パースペクティブに使用されます。 複数の列グループを行に分割できます。 詳細については、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