Sdílet prostřednictvím


SELECT

Platí pro:zaškrtnutí označeného ano Databricks SQL zaškrtnutí označeného ano Databricks Runtime

Vytvoří výsledek set z jednoho nebo více table odkazů. Klauzule SELECT může být součástí dotazu, který obsahuje také běžné výrazy table (CTE), set operace 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 } [, ...] )

Parameters

  • rady

    Rady pomáhají optimalizátoru Azure Databricks lépe rozhodovat o plánování. Azure Databricks podporuje nápovědy, které ovlivňují výběr strategií join a repartici dat.

  • ALL

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

  • ZŘETELNÝ

    Select všechny odpovídající řádky z table odkazů po odebrání duplicit ve výsledcích.

  • named_expression

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

    • výraz

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

    • column_alias

      Volitelné pojmenování výsledku výrazu pomocí columnidentifier. Pokud není k dispozici databricks column_alias SQL, odvozuje ho.

  • star_clause

    Zkratka pro pojmenování všech odkazovatelných columns v klauzuli FROM nebo konkrétního columns odkazu table či polí v klauzuli FROM.

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

  • LATERAL VIEW

    Používá se ve spojení s funkcemi generátoru, jako je EXPLODE, která generuje virtuální table 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á. Měli byste vyvolat funkci generátoru s hodnotou table jako table_reference.

  • 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, COUNT, SUM, AVG) k seskupení řádků na základě výrazů seskupení a agregace values 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).

  • QUALIFY

    Predikáty, které slouží k filtrování výsledků window funkcí. Pokud chcete použít QUALIFY, musí být v SELECTlist nebo klauzuli QUALIFY přítomna alespoň jedna window funkce.

Select na Deltě table

Kromě standardních možností SELECT podporují delta tables možnosti časového cestování popsané v této části. Podrobnosti najdete v tématu Práce s historií table 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.

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

Příklad

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

> SELECT * FROM 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 například chcete dotazovat verzi 123 pro tableevents, 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