共用方式為


管道作業

適用於:打勾標示為是 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

    將新的欄位附加至查詢選取清單。

    • 表示式

      結合一或多個值、運算符號和 SQL 函式來計算並返回一個值的組合。

      expression 可能包含查詢選取清單中列的參考,以及在此 EXTEND 子句中之前的 column_alias

    • column_alias

      為表達式結果命名的選擇性數據行標識碼。 如果未提供任何 column_alias,Azure Databricks 會自行產生一個。

  • SET

    使用新值覆寫查詢選取清單中的現有數據行。

    作業將按照 SET 子句中出現的順序執行。 任何表達式的結果都可以觀察先前表達式所更新的數據行。

    • 欄位名稱

      要更新的欄位名稱。 欄位不存在時,Azure Databricks 會引發 UNRESOLVED_COLUMN 錯誤。

    • 表示式

      評估為值的一或多個值、運算元和 SQL 函式的組合。

  • DROP column_name [, ...]

    從查詢選取清單中移除資料行。

    如果數據行不存在,Azure Databricks 會引發 UNRESOLVED_COLUMN 錯誤。

  • AS table_alias

    將名稱指派給查詢的結果。

  • WHERE

    根據提供的述詞篩選查詢的結果。

  • LIMIT

    限制查詢可傳回的數據列數目上限。 這個子句通常會遵循 ORDER BY 來產生確定性結果。

  • OFFSET

    略過查詢所傳回的一些數據列。 這個子句通常會與 LIMIT 搭配使用,以透過結果集 頁面,並 ORDER BY 產生具決定性的結果。

    注意

    使用 LIMITOFFSET 分頁結果集時,將處理所有資料列,包括被略過的資料列。 不過,結果集中只會傳回指定的數據列子集。 不建議將這種技術應用於需要大量資源的查詢分頁。

  • 匯總

    根據提供的表達式和選擇性群組表達式,匯總查詢的結果集。

    此作業會產生結果集,其中群組數據行會出現在匯總數據行之前。

    • 彙總

      指定要匯總的表達式。

    • GROUP BY

      指定數據列分組的運算式。 如果未指定,所有數據列都會視為單一群組。

      • grouping_expr

        用來識別分組欄位的表達式。 如需詳細資訊,請參閱 GROUP BY

        不同於泛型 GROUP BY 子句,整數數值會識別查詢中提供輸入的數據行,而不是產生的結果集。

    • column_alias

      為表達式結果命名的選擇性數據行標識碼。 如果未提供任何 column_alias,Azure Databricks 會衍生一個。

  • JOIN

    使用聯結來結合兩個或多個關係。 如需詳細資訊,請參閱 JOIN

  • ORDER BY

    排序查詢結果集的數據列。 輸出數據列會依分割區排序。 此參數與 SORT BYCLUSTER BYDISTRIBUTE BY 互斥,而且無法一起指定。

  • 設置運算符

    使用 UNIONEXCEPTINTERSECT 運算符,將查詢與一或多個子查詢結合。

  • 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