SELECT

Compose un jeu de résultats à partir d’une ou plusieurs tables. La clause SELECT peut faire partie d’une requête qui comprend également des expressions de table communes (CTE), des opérations de définition et diverses autres clauses.

Syntaxe

SELECT [ hints ] [ ALL | DISTINCT ] { named_expression | star_clause } [, ...]
  FROM from_item [, ...]
  [ LATERAL VIEW clause ]
  [ PIVOT clause ]
  [ WHERE clause ]
  [ GROUP BY clause ]
  [ HAVING clause]
  [ QUALIFY clause ]

from_item
{ table_name [ TABLESAMPLE clause ] [ table_alias ] |
  JOIN clause |
  [ LATERAL ] table_valued_function [ table_alias ] |
  VALUES clause |
  [ LATERAL ] ( query ) [ TABLESAMPLE clause ] [ table_alias ] }

named_expression
   expression [ column_alias ]

star_clause
   [ { table_name | view_name } . ] * [ except_clause ]

except_clause
   EXCEPT ( { column_name | field_name } [, ...] )

Paramètres

  • indicateurs

    Les indicateurs permettent à l’optimiseur de Databricks Runtime de prendre de meilleures décisions en matière de planification. Databricks Runtime prend en charge des indicateurs qui influencent la sélection des stratégies de jointure et le repartitionnement des données.

  • ALL

    Sélectionnez toutes les lignes correspondantes de la relation. Option activée par défaut.

  • DISTINCT

    Sélectionnez toutes les lignes correspondantes de la relation après avoir supprimé les doublons dans les résultats.

  • named_expression

    Expression avec un nom affecté facultatif.

    • expression

      Combinaison d’une ou plusieurs valeurs, opérateurs et fonctions SQL qui prennent une valeur.

    • column_alias

      Identificateur de colonne facultatif qui nomme le résultat de l’expression. Si aucun column_alias n’est fourni, Databricks Runtime en dérive un.

  • star_clause

    Raccourci pour nommer toutes les colonnes pouvant être référencées dans la clause FROM. La liste des colonnes est triée selon l’ordre des from_item et l’ordre des colonnes dans chaque from_item.

    La colonne _metadata n’est pas incluse dans cette liste. Vous devez la référencer explicitement.

    • table_name

      S’il est présent, il limite les colonnes à nommer à celles de la table référentielle spécifiée.

    • view_name

      S’il est spécifié, les colonnes doivent être étendues à celles de la vue référentielle spécifiée.

  • except_clause

    À partir de :Databricks Runtime 11.0

    Élague éventuellement des colonnes ou des champs dans l’ensemble de colonnes référençables identifiées dans la clause select_star.

    • column_name

      Colonne qui fait partie de l’ensemble de colonnes que vous pouvez référencer.

    • field_name

      Référence à un champ dans une colonne de l’ensemble de colonnes que vous pouvez référencer. Si vous excluez tous les champs d’un STRUCT, le résultat est un STRUCT vide.

    Chaque nom doit référencer une colonne incluse dans l’ensemble de colonnes que vous pouvez référencer ou leurs champs. Sinon, Databricks Runtime génère une erreur UNRESOLVED_COLUMN. Si les noms se chevauchent ou ne sont pas uniques, Databricks Runtime déclenche une erreur EXCEPT_OVERLAPPING_COLUMNS.

  • from_item

    Source d’entrée pour le SELECT. Celui-ci peut avoir l'une des valeurs suivantes :

    • table_name

      Identifie une table qui peut contenir une spécification temporelle. Pour plus d’informations, consultez Interroger un instantané plus ancien d’une table (voyage dans le temps).

    • view_name

      Identifie une vue.

    • JOIN

      Combine deux relations ou plus à l’aide d’une jointure.

    • [LATERAL]fonction_table

      Appelle une fonction de table. Pour faire référence aux colonnes exposées par un précédent from_item dans la même clause FROM, vous devez spécifier LATERAL.

    • VALUES

      Définit une table Inline.

    • [LATERAL] ( requête )

      Calcule une relation à l’aide d’une requête. Une requête précédée de LATERAL peut faire référence à des colonnes exposées par un from_item précédent dans la même clause FROM. Une telle construction est appelée requête corrélée ou dépendante.

      LATERAL est pris en charge depuis Databricks Runtime 9,0.

    • TABLESAMPLE

      Si vous le souhaitez, réduisez la taille du jeu de résultats en échantillonnant uniquement une fraction des lignes.

    • table_alias

      Spécifie éventuellement une étiquette pour le from_item. Si le table_alias inclut column_identifier, leur nombre doit correspondre au nombre de colonnes dans le from_item.

  • PIVOT

    Utilisé pour la perspective des données ; vous pouvez récupérer les valeurs agrégées en fonction d’une valeur de colonne spécifique.

  • LATERAL VIEW

    Utilisé conjointement avec les fonctions de générateur telles que EXPLODE, qui génère une table virtuelle contenant une ou plusieurs lignes. LATERAL VIEW applique les lignes à chaque ligne de sortie d’origine.

  • WHERE

    Filtre le résultat de la clause FROM en fonction des prédicats fournis.

  • GROUP BY

    Expressions utilisées pour regrouper les lignes. Utilisé conjointement avec les fonctions d’agrégation (MIN, MAX, COUNT, SUM, AVG) pour regrouper des lignes en fonction des expressions de regroupement et des valeurs agrégées dans chaque groupe. Lorsqu’une clause FILTER est attachée à une fonction d’agrégation, seules les lignes correspondantes sont transmises à cette fonction.

  • HAVING

    Prédicats par lesquels les lignes produites par GROUP BY sont filtrées. La clause HAVING permet de filtrer les lignes après l’exécution du regroupement. Si vous spécifiez HAVING sans GROUP BY, il indique GROUP BY sans expressions de regroupement (agrégat global).

  • QUALIFY

    Prédicats utilisés pour filtrer les résultats des fonctions de fenêtre. Pour utiliser QUALIFY, au moins une fonction de fenêtre doit être présente dans la liste SELECT ou la clause QUALIFY.

Sélectionner sur une table Delta

Outre les options standard SELECT, les tables Delta prennent en charge les options de voyage dans le temps décrites dans cette section. Pour plus d’informations, consultez Interroger un instantané plus ancien d’une table (voyage dans le temps).

Syntaxe de AS OF

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • timestamp_expression peut être n’importe quel :
    • '2018-10-18T22:15:12.013Z', autrement dit, une chaîne qui peut être convertie en horodateur
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18', autrement dit, une chaîne de date
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • Toute autre expression qui est ou qui peut être castée en un timestamp
  • version est une valeur de type long qui peut être obtenue à partir de la sortie de DESCRIBE HISTORY table_spec.

Ni timestamp_expression ni version ne peuvent être des sous-requêtes.

Exemple

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

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

Syntaxe de @

Utilisez la syntaxe @ pour spécifier le timestamp ou la version. Le timestamp doit être au format yyyyMMddHHmmssSSS. Vous pouvez spécifier une version après @ en ajoutant v à la version. Par exemple, pour interroger la version 123 de la table events, spécifiez events@v123.

Exemple

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

Exemples

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