Condividi tramite


SELECT (selezione secondaria)

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Compone un insieme di risultati da uno o più riferimenti di tabella . La clausola SELECT può far parte di una query che include anche espressioni di tabella comuni (CTE), operazioni set e varie altre clausole.

Sintassi

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

Parametri

  • SELECT clausola

    Raccoglie le colonne da restituire dalla sottoquery, inclusa l'esecuzione di espressioni, aggregazioni e deduplicazione.

  • table_reference

    Origine di input per l'oggetto SELECT. Questo riferimento di input può essere trasformato in un riferimento di streaming usando la STREAM parola chiave prima del riferimento.

  • LATERAL VIEW

    Usato insieme a funzioni del generatore, ad esempio EXPLODE, che genera una tabella virtuale contenente una o più righe. LATERAL VIEW applica le righe a ogni riga di output originale.

    In Databricks SQL e a partire da Databricks Runtime 12.2 questa clausola è deprecata. È necessario richiamare una funzione generatore con valori di tabella come table_reference.

  • WHERE

    Filtra il risultato della FROM clausola in base ai predicati forniti.

  • GROUP BY

    Espressioni utilizzate per raggruppare le righe. Viene usato insieme alle funzioni di aggregazione (MIN, MAX, COUNT, SUM, AVG) per raggruppare le righe in base alle espressioni di raggruppamento e ai valori aggregati in ogni gruppo. Quando una FILTER clausola è associata a una funzione di aggregazione, solo le righe corrispondenti vengono passate a tale funzione.

  • HAVING

    Predicati in base ai quali vengono filtrate le righe generate da GROUP BY . La HAVING clausola viene utilizzata per filtrare le righe dopo l'esecuzione del raggruppamento. Se si specifica HAVING senza GROUP BY, indica un oggetto GROUP BY senza raggruppamento di espressioni (aggregazione globale).

  • QUALIFY

    Predicati utilizzati per filtrare i risultati delle funzioni finestra. Per usare QUALIFY, è necessario che almeno una funzione finestra sia presente nell'elenco SELECT o nella clausola QUALIFY.

Selezionare la tabella Delta

Oltre alle opzioni standard di SELECT, le tabelle Delta supportano le opzioni di viaggio del tempo descritte in questa sezione. Per informazioni dettagliate, vedere Lavorare con la cronologia delle tabelle Delta Lake.

Sintassi AS OF

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • timestamp_expression può essere uno qualsiasi di:
    • '2018-10-18T22:15:12.013Z'ovvero una stringa di cui è possibile eseguire il cast a un timestamp
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18', ovvero una stringa di data
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • Qualsiasi altra espressione che è o può essere eseguita il cast a un timestamp
  • version è un valore long che può essere ottenuto dall'output di DESCRIBE HISTORY table_spec.

timestamp_expressionversion possono essere sottoquery.

Esempio

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

> SELECT * FROM events VERSION AS OF 123

Sintassi @

Usare la @ sintassi per specificare il timestamp o la versione. Il timestamp deve essere in yyyyMMddHHmmssSSS formato . È possibile specificare una versione dopo @ anteponendo una v alla versione. Ad esempio, per eseguire una query sulla versione 123 per la tabella events, specificare events@v123.

Esempio

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

Esempi

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