Delen via


SELECT (subselectie)

Van toepassing op:vinkje als ja aan Databricks SQL vinkje als ja aan Databricks Runtime

Hiermee wordt een resultatenset samengesteld uit een of meer tabelverwijzingen. De SELECT component kan deel uitmaken van een query die ook algemene tabelexpressies (CTE), setbewerkingen en verschillende andere componenten bevat.

Syntaxis

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

Parameterwaarden

  • SELECT clausule

    Verzamelt de kolommen die moeten worden geretourneerd vanuit de subquery, inclusief de uitvoering van expressies, aggregaties en ontdubbeling.

  • tabel_referentie

    Een bron van invoer voor de SELECT. Deze invoerreferentie kan worden omgezet in een streaming-verwijzing met behulp van het STREAM trefwoord vóór de verwijzing.

    Als het table_reference een metrische weergave is, mag er geen andere tabelreferentie in de FROM component staan.

  • LATERAL VIEW

    Wordt gebruikt in combinatie met generatorfuncties zoals EXPLODE, waarmee een virtuele tabel met een of meer rijen wordt gegenereerd. LATERAL VIEW past de rijen toe op elke oorspronkelijke uitvoerrij.

    In Databricks SQL en vanaf Databricks Runtime 12.2 wordt deze component afgeschaft. U moet een generatorfunctie met tabelwaarden aanroepen als een table_reference.

  • WHERE

    Hiermee filtert u het resultaat van de FROM component op basis van de opgegeven predicaten.

  • GROUP BY

    De expressies die worden gebruikt om de rijen te groeperen. Dit wordt gebruikt in combinatie met statistische functies (MIN, MAX, COUNT, SUM, ) AVGom rijen te groeperen op basis van de groeperingsexpressies en statistische waarden in elke groep. Wanneer een FILTER component is gekoppeld aan een statistische functie, worden alleen de overeenkomende rijen doorgegeven aan die functie.

  • HAVING

    De predicaten waarop de rijen die door worden geproduceerd GROUP BY , worden gefilterd. De HAVING component wordt gebruikt om rijen te filteren nadat de groepering is uitgevoerd. Als u zonder opgeeftHAVING, wordt een GROUP BY expressie zonder groepering (globale statistische functie) GROUP BYaangegeven.

  • QUALIFY

    De predicaten die worden gebruikt om de resultaten van vensterfuncties te filteren. Als u QUALIFYwilt gebruiken, moet ten minste één vensterfunctie aanwezig zijn in de SELECT lijst of de QUALIFY clausule.

Selecteren in Delta-tabel

Naast de standaardopties SELECT ondersteunen Delta-tabellen de opties voor tijdreizen die in deze sectie worden beschreven. Zie Werken met Delta Lake-tabelgeschiedenis voor meer informatie.

AS OF syntaxis

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • timestamp_expression kan een van de volgende zijn:
    • '2018-10-18T22:15:12.013Z', dat wil gezegd, een tekenreeks die kan worden gecast naar een tijdstempel
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18', dat wil gezegd, een datumtekenreeks
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • Elke andere expressie die wel of niet kan worden omgezet in een tijdstempel
  • version is een lange waarde die kan worden verkregen uit de uitvoer van DESCRIBE HISTORY table_spec.

timestamp_expression Geen van beide version subquery's.

Opmerking

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

> SELECT * FROM events VERSION AS OF 123

@ syntaxis

Gebruik de @ syntaxis om de tijdstempel of versie op te geven. De tijdstempel moet een yyyyMMddHHmmssSSS indeling hebben. U kunt een versie opgeven nadat @ u een v versie wilt toevoegen aan de versie. Als u bijvoorbeeld een query wilt uitvoeren op de versie 123 van de tabel events, geeft u events@v123op.

Opmerking

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

Voorbeelden

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