VÝBĚR

Platí pro:check marked yes Databricks SQL check marked yes Databricks Runtime

Vytvoří sadu výsledků z jednoho nebo více odkazů na tabulku. Klauzule SELECT může být součástí dotazu, který obsahuje také běžné výrazy tabulek (CTE), operace set a různé další klauzule.

Syntaxe

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 } [, ...] )

Parametry

  • Tipy

    Rady pomáhají optimalizátoru Azure Databricks lépe rozhodovat o plánování. Azure Databricks podporuje rady, které ovlivňují výběr strategií spojení a opětovné rozdělení dat.

  • ALL

    Vyberte všechny odpovídající řádky z odkazů na tabulku. Ve výchozím nastavení povolena.

  • ODLIŠNÉ

    Po odebrání duplicit ve výsledcích vyberte všechny odpovídající řádky z odkazů na tabulku.

  • named_expression

    Výraz s volitelným přiřazeným názvem.

    • Výraz

      Kombinace jedné nebo více hodnot, operátorů a funkcí SQL, které se vyhodnotí jako hodnota.

    • column_alias

      Volitelný identifikátor sloupce určující název výsledku výrazu. Pokud není k dispozici databricks column_alias SQL, odvozuje ho.

  • star_clause

    Zkratka pro pojmenování všech odkazovatelných sloupců v FROM klauzuli nebo konkrétních sloupců nebo polích odkazu na FROM tabulku v klauzuli.

  • table_reference

    Zdroj vstupu pro SELECT. Tento vstupní odkaz lze převést na odkaz streamování pomocí klíčového STREAM slova před odkazem.

  • LATERÁLNÍ ZOBRAZENÍ

    Používá se ve spojení s funkcemi generátoru, jako EXPLODEje například , která generuje virtuální tabulku obsahující jeden nebo více řádků. LATERAL VIEW použije řádky na každý původní výstupní řádek.

    V Databricks SQL a počínaje Databricks Runtime 12.2 je tato klauzule zastaralá. Jako table_reference byste měli vyvolat funkci generátoru s hodnotami tabulky.

  • WHERE

    Filtruje výsledek klauzule na základě zadaných FROM predikátů.

  • GROUP BY

    Výrazy, které se používají k seskupení řádků. Používá se ve spojení s agregačními funkcemi (MIN, MAX, COUNTSUM, ), AVGk seskupení řádků na základě výrazů seskupení a agregace hodnot v každé skupině. FILTER Pokud je klauzule připojená k agregační funkci, předají se této funkci pouze odpovídající řádky.

  • HAVING

    Predikáty, podle kterých jsou řádky vytvořené filtrem GROUP BY . Klauzule HAVING slouží k filtrování řádků po provedení seskupení. Pokud zadáte HAVING bez GROUP BY, znamená GROUP BY to bez seskupení výrazů (globální agregace).

  • NÁROK

    Predikáty, které slouží k filtrování výsledků funkcí okna. Chcete-li použít QUALIFY, musí být v seznamu SELECT nebo klauzuli QUALIFY přítomna alespoň jedna funkce okna.

Výběr v tabulce Delta

Kromě standardních SELECT možností tabulky Delta podporují možnosti časového cestování popsané v této části. Podrobnosti najdete v tématu Práce s historií tabulek Delta Lake.

Syntaxe AS OF

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • timestamp_expression může být libovolná z těchto možností:
    • '2018-10-18T22:15:12.013Z'to znamená řetězec, který lze přetypovat na časové razítko.
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18'to znamená řetězec kalendářního data.
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • Jakýkoli jiný výraz, který je nebo lze přetypovat na časové razítko
  • version je dlouhá hodnota, kterou lze získat z výstupu DESCRIBE HISTORY table_spec.

version Ani timestamp_expression nemůže být poddotaz.

Příklad

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

> SELECT * FROM delta.`/mnt/delta/events` VERSION AS OF 123

Syntaxe @

@ Pomocí syntaxe zadejte časové razítko nebo verzi. Časové razítko musí být ve yyyyMMddHHmmssSSS formátu. Verzi @ můžete zadat tak, že ji předejdete v . Pokud chcete například zadat dotaz na verzi 123 tabulky events, zadejte events@v123.

Příklad

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

Příklady

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