選擇

從一個或多個表組成一個結果集。的選擇子句可以是查詢的一部分,該查詢還包括公共表表達式(CTE)、集合操作和各種其他子句。

語法

選擇提示所有|截然不同的named_expression|star_clause(,...from_item(,...橫向視圖條款條款在哪裏條款集團通過條款條款有資格條款from_itemtable_nameTABLESAMPLE條款table_alias|加入條款|橫向table_valued_functiontable_alias|條款|橫向查詢TABLESAMPLE條款table_aliasnamed_expression表達式column_aliasstar_clausetable_name|view_nameexcept_clauseexcept_clause除了column_name|field_name(,...

參數

  • 提示

    提示幫助Databricks運行時優化器做出更好的計劃決策。Databricks運行時支持影響連接策略選擇和數據重分區的提示。

  • 所有

    從關係中選擇所有匹配的行。默認啟用。

  • 截然不同的

    刪除結果中的重複項後,從關係中選擇所有匹配的行。

  • named_expression

    具有可選分配名稱的表達式。

    • 表達式

      一個或多個值、運算符和求值的SQL函數的組合。

    • column_alias

      命名表達式結果的可選列標識符。如果沒有column_alias提供Databricks Runtime派生一個。

  • star_clause

    類中命名所有可引用列的簡寫條款。列的列表按的順序排列from_itemS和每一列的順序from_item

    _metadata列不包括在此列表中。必須顯式地引用它。

    • table_name

      如果存在,則將要命名的列限製為指定的可引用表中的列。

    • view_name

      如果指定,則將要展開的列限製為指定可引用視圖中的列。

  • except_clause

    自:Databricks運行時11.0

    控件中標識的可引用列集中可刪除列或字段select_star條款。

    • column_name

      作為可引用列集的一部分的列。

    • field_name

      對可以引用的列集中某一列中的字段的引用。如果從a中排除所有字段結構體,結果為空結構體

    每個名稱必須引用包含在您可以引用的列集中的列或它們的字段。否則,Databricks Runtime將引發UNRESOLVED_COLUMN錯誤。如果名稱重疊或不唯一,Databricks Runtime將引發EXCEPT_OVERLAPPING_COLUMNS錯誤。

  • from_item

    的輸入源選擇.下列其中一項:

    • table_name

      屬性的表時間規範.看到查詢一個表的舊快照(時間旅行)獲取詳細信息。

    • view_name

      標識一個視圖。

    • 加入

      使用連接組合兩個或多個關係。

    • (橫向)table_valued_function

      調用表函數。引用由前對象公開的列from_item同樣的條款,你必須指定橫向

    • 定義內聯表。

    • (橫向)(查詢

      使用查詢計算關係。前綴為的查詢橫向可參考專欄曝光前from_item同樣的條款。這樣的構造稱為相關查詢或相關查詢。

      橫向自Databricks Runtime 9.0開始支持。

    • TABLESAMPLE

      可選地減少結果集的大小,方法是隻對部分行進行抽樣。

    • table_alias

      屬性的標簽from_item.如果table_alias包括column_identifierS的列數必須與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也不版本可以是子查詢。

例子

>選擇事件時間戳作為2018 - 10 - 18 t22:15:12.013z>選擇δ' /mnt/δ/事件版本作為123

@語法

使用@語法指定時間戳或版本。時間戳必須是inyyyyMMddHHmmssSSS格式。之後可以指定版本@通過將v到版本。例如,查詢版本123對於桌子來說事件,指定events@v123

例子

>選擇事件@20190101000000000>選擇事件@v123

例子

——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