共用方式為


SELECT

適用於:核取記號為「是」Databricks SQL 核取記號為「是」Databricks Runtime

從一個或多個 table 參考組合出結果 set。 SELECT 子句可以是查詢的一部分,其中也包含常見的 table 表示式 (CTE)、set 作業,以及各種其他子句。

語法

SELECT [ hints ] [ ALL | DISTINCT ] { named_expression | star_clause } [, ...]
  FROM table_reference [, ...]
  [ LATERAL VIEW clause ]
  [ WHERE clause ]
  [ GROUP BY clause ]
  [ HAVING clause]
  [ QUALIFY clause ]

named_expression
   expression [ column_alias ]

star_clause
   [ { table_name | view_name } . ] * [ except_clause ]

except_clause
   EXCEPT ( { column_name | field_name } [, ...] )

Parameters

  • 提示

    提示可協助 Azure Databricks 優化器做出更佳的規劃決策。 Azure Databricks 支援影響選取 join 策略和重新分割數據的提示。

  • ALL

    Select 所有相符的資料列來自 table 參考。 預設為啟用。

  • DISTINCT

    移除結果中的重複項目後,提取所有來自 table 參考來源的符合條件的 Select 資料列。

  • named_expression

    具有選擇性指派名稱的表達式。

    • expression

      一或多個 values、運算子和 SQL 函式的組合,其結果會評估為一個值。

    • column_alias

      可選的 columnidentifier 命名表達式結果。 column_alias如果沒有 ,則 Databricks SQL 會衍生一個。

  • star_clause

    用來命名 FROM 子句中所有可參考 columns 的速記,或 FROM 子句中特定 table 參考的 columns 或字段。

  • table_reference

    的輸入 SELECT來源。 這個輸入參考可以在參考之前使用 STREAM 關鍵詞,轉換成串流參考。

  • LATERAL VIEW

    與產生器函式搭配使用,例如 EXPLODE,其會產生包含一或多個數據列的虛擬 table。 LATERAL VIEW 會將數據列套用至每個原始輸出數據列。

    在 Databricks SQL 中,從 Databricks Runtime 12.2 開始,這個子句已被取代。 您應該將 table 值的生成器函數當作 表格引用來呼叫。

  • WHERE

    根據提供的述詞篩選 子句的結果 FROM

  • GROUP BY

    用來分組數據列的表達式。 這是與聚合函數搭配使用(MINMAXCOUNTSUMAVG),根據群組表達式將資料列分組,並在每個群組內匯總 values。 FILTER當子句附加至聚合函數時,只會將相符的數據列傳遞至該函式。

  • HAVING

    篩選所產生之數據列的 GROUP BY 述詞。 子 HAVING 句是用來在群組執行之後篩選數據列。 如果您指定 HAVING 不含 GROUP BY,則表示 GROUP BY 沒有群組表達式的 (全域匯總)。

  • QUALIFY

    用來篩選 window 函式結果的判斷式。 若要使用 QUALIFY,至少必須有一個 window 函式 出現在 SELECTlist 或 QUALIFY 子句中。

Delta table 上的 Select

除了標準 SELECT 選項之外,Delta tables 支援本節所述的時間旅行選項。 如需詳細資訊,請參閱 使用 Delta Lake table 歷程記錄

AS OF 語法

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • timestamp_expression 可以是下列任一項:
    • '2018-10-18T22:15:12.013Z',也就是可以轉換成時間戳的字串
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18',也就是日期字串
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • 任何其他可轉換成時間戳的表達式
  • version 是一個長值,可從的 DESCRIBE HISTORY table_spec輸出取得。

timestamp_expressionversion都不能是子查詢。

範例

> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'

> SELECT * FROM events VERSION AS OF 123

@ 語法

@使用語法來指定時間戳或版本。 時間戳的格式必須為 yyyyMMddHHmmssSSS 。 您可以在 之後 @ 指定版本,方法是在 版本前面加上 v 。 例如,若要查詢 tableevents的版本 123,請指定 events@v123

範例

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

範例

-- select all referencable columns from all tables
> SELECT * FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
  1   2   3   4

-- select all referencable columns from one table
> SELECT t2.* FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
  3   4

-- select all referencable columns from all tables except t2.c4
> SELECT * EXCEPT(c4) FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
  1   2   3

-- select all referencable columns from a table, except a nested field.
> SELECT * EXCEPT(c2.b) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
  1  { "a" : 2 }

-- Removing all fields results in an empty struct
> SELECT * EXCEPT(c2.b, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
  1  { }

-- Overlapping names result in an error
> SELECT * EXCEPT(c2, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
  Error: EXCEPT_OVERLAPPING_COLUMNS