選擇
從一個或多個表組成一個結果集。的選擇
子句可以是查詢的一部分,該查詢還包括公共表表達式(CTE)、集合操作和各種其他子句。
語法
選擇[提示][所有|截然不同的]{named_expression|star_clause}(,...]從from_item(,...][橫向視圖條款][主條款][在哪裏條款][集團通過條款][有條款][有資格條款]from_item{table_name[TABLESAMPLE條款][table_alias]|加入條款|[橫向]table_valued_function[table_alias]|值條款|[橫向](查詢)[TABLESAMPLE條款][table_alias]}named_expression表達式[column_alias]star_clause[{table_name|view_name}.]*[except_clause]except_clause除了({column_name|field_name}(,...])
參數
提示幫助Databricks運行時優化器做出更好的計劃決策。Databricks運行時支持影響連接策略選擇和數據重分區的提示。
所有
從關係中選擇所有匹配的行。默認啟用。
截然不同的
刪除結果中的重複項後,從關係中選擇所有匹配的行。
named_expression
具有可選分配名稱的表達式。
一個或多個值、運算符和求值的SQL函數的組合。
命名表達式結果的可選列標識符。如果沒有
column_alias
提供Databricks Runtime派生一個。
star_clause
類中命名所有可引用列的簡寫
從
條款。列的列表按的順序排列from_item
S和每一列的順序from_item
.的_metadata列不包括在此列表中。必須顯式地引用它。
如果存在,則將要命名的列限製為指定的可引用表中的列。
如果指定,則將要展開的列限製為指定可引用視圖中的列。
except_clause
控件中標識的可引用列集中可刪除列或字段
select_star
條款。作為可引用列集的一部分的列。
對可以引用的列集中某一列中的字段的引用。如果從a中排除所有字段
結構體
,結果為空結構體
.
每個名稱必須引用包含在您可以引用的列集中的列或它們的字段。否則,Databricks Runtime將引發UNRESOLVED_COLUMN錯誤。如果名稱重疊或不唯一,Databricks Runtime將引發EXCEPT_OVERLAPPING_COLUMNS錯誤。
from_item
的輸入源
選擇
.下列其中一項:屬性的表時間規範.看到查詢一個表的舊快照(時間旅行)獲取詳細信息。
標識一個視圖。
使用連接組合兩個或多個關係。
調用表函數。引用由前對象公開的列
from_item
同樣的從
條款,你必須指定橫向
.定義內聯表。
(橫向)(查詢)
使用查詢計算關係。前綴為的查詢
橫向
可參考專欄曝光前from_item
同樣的從
條款。這樣的構造稱為相關查詢或相關查詢。橫向
自Databricks Runtime 9.0開始支持。可選地減少結果集的大小,方法是隻對部分行進行抽樣。
屬性的標簽
from_item
.如果table_alias
包括column_identifier
S的列數必須與from_item
.
用於數據透視;您可以根據特定的列值獲得聚合值。
與生成器函數一起使用,例如
爆炸
,它生成一個包含一行或多行的虛擬表。橫向視圖
將行應用到每個原始輸出行。屬性的結果進行篩選
從
子句基於所提供的謂詞。用於對行進行分組的表達式。它與聚合函數(
最小值
,馬克斯
,數
,總和
,AVG
)根據分組表達式和每個組中的聚合值對行進行分組。當一個過濾器
子句附加到聚合函數時,隻有匹配的行被傳遞給該函數。用於生成行的謂詞
集團通過
是過濾。的有
子句用於在執行分組後篩選行。如果你指定有
沒有集團通過
,表示集團通過
沒有對表達式進行分組(全局聚合)。用於篩選窗口函數結果的謂詞。使用
有資格
,至少一個窗口函數必須出現在SELECT列表或qualiq子句中。
在Delta表上選擇
除標準外選擇
選項,Delta表支持本節中描述的時間旅行選項。詳細信息請參見查詢一個表的舊快照(時間旅行).
作為的
語法
table_identifier時間戳作為的timestamp_expressiontable_identifier版本作為的版本
timestamp_expression
可以是以下任意一個:2018 - 10 - 18 t22:15:12.013z
也就是說,可以轉換為時間戳的字符串鑄造(' 2018-10-1813:36:32c '作為時間戳)
“2018-10-18”
,即日期字符串current_timestamp ()-時間間隔12小時
date_sub(當前日期(),1)
可以轉換為時間戳的任何其他表達式
版本
的輸出是可以得到的長值描述曆史table_spec
.
既不timestamp_expression
也不版本
可以是子查詢。
例子
——select * from VALUES(1,2) AS t1(c1, c2), VALUES(3,4) AS t2(c3, c4);1 2 3 4——從一個表> select t2中選擇所有可引用的列。* FROM VALUES(1,2) AS t1(c1, c2), VALUES(3,4) AS t2(c3, c4);3 4——從所有表中選擇所有可引用的列,除了t2。SELECT * EXCEPT(c4) FROM VALUES(1,2) AS t1(c1, c2), VALUES(3,4) AS t2(c3, c4);1 2 3——從一個表中選擇所有可引用的列,除了嵌套字段。> SELECT * EXCEPT(c2.b) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);1 {"a": 2}——刪除所有字段將導致一個空結構> SELECT * EXCEPT(c2. 2)。b, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);1{}——重疊名稱導致錯誤> SELECT * EXCEPT(c2, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);錯誤:EXCEPT_OVERLAPPING_COLUMNS