適用於:
Databricks SQL
Databricks Runtime
由一個或多個 數據表參考組成結果集。
SELECT 子句可以是查詢的一部分,其中也包含通用數據表運算式 (CTE)、集合作業和各種其他子句。
語法
SELECT 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 } [, ...] )
參數
-
收集要從子查詢中返回的欄位,包括執行運算式、聚合和去除重複。
-
的輸入
SELECT來源。 這個輸入參考可以在參考之前使用STREAM關鍵詞,轉換成串流參考。如果是
table_reference度量視圖,則子句中FROM不得有其他表格參照。 -
與產生器函式搭配使用,例如
EXPLODE,其會產生包含一或多個數據列的虛擬數據表。LATERAL VIEW會將數據列套用至每個原始輸出數據列。在 Databricks SQL 中,從 Databricks Runtime 12.2 開始,這個子句已被取代。 您應該將資料表值產生器函數作為 資料表參考進行呼叫。
-
根據提供的述詞篩選 子句的結果
FROM。 -
用來分組數據列的表達式。 這與聚合函數搭配使用(
MIN、MAX、COUNT、SUM、AVG)來根據每個群組中的群組表達式和匯總值來分組數據列。FILTER當子句附加至聚合函數時,只會將相符的數據列傳遞至該函式。 -
篩選所產生之數據列的
GROUP BY述詞。 子HAVING句是用來在群組執行之後篩選數據列。 如果您指定HAVING不含GROUP BY,則表示GROUP BY沒有群組表達式的 (全域匯總)。 -
用來篩選視窗函式結果的謂詞。 若要使用
QUALIFY,至少必須有一個 視窗函式 出現在 SELECT 清單中或 QUALIFY 子句中。
在 Delta 資料表上選取
除了標準 SELECT 選項之外,Delta 數據表還支援本節中所述的時間移動選項。 如需詳細資訊,請參閱 使用 Delta Lake 資料表歷程記錄。
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 hoursdate_sub(current_date(), 1)- 任何其他可轉換成時間戳的表達式
-
-
version是一個長值,可從的DESCRIBE HISTORY table_spec輸出取得。
兩timestamp_expression者version都不能是子查詢。
範例
> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'
> SELECT * FROM events VERSION AS OF 123
@ 語法
@使用語法來指定時間戳或版本。 時間戳的格式必須為 yyyyMMddHHmmssSSS 。 您可以在 之後 @ 指定版本,方法是在 版本前面加上 v 。 例如,若要查詢資料表 123的版本 events,請指定 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