Compartir vía


SELECT (subselect)

Se aplica a:casilla marcada como Sí Databricks SQL casilla marcada como Sí Databricks Runtime

Compone un conjunto de resultados a partir de una o varias referencias de tabla. La cláusula SELECT puede formar parte de una consulta que también incluya expresiones de tabla comunes (CTE), operaciones Set y varias otras cláusulas.

Sintaxis

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

Parámetros

  • Cláusula SELECT

    Recopila las columnas que se van a devolver de la subconsulta, incluidas la ejecución de expresiones, agregaciones y desduplicación.

  • table_reference

    Origen de entrada para SELECT. Esta referencia de entrada se puede convertir en una referencia de streaming mediante la palabra clave STREAM antes de la referencia.

  • LATERAL VIEW

    Se usa junto con funciones de generador, como EXPLODE, que genera una tabla virtual que contiene una o varias filas. LATERAL VIEW aplica las filas a cada fila de salida original.

    En Databricks SQL y a partir de Databricks Runtime 12.2, esta cláusula está en desuso. Debe invocar una función de generador con valores de tabla como table_reference.

  • WHERE

    Filtra el resultado de la cláusula FROM en función de los predicados proporcionados.

  • GROUP BY

    Expresiones que se usan para agrupar las filas. Se usa junto con las funciones de agregado (MIN, MAX, COUNT, SUM, AVG) para agrupar filas según las expresiones de agrupación y los valores agregados de cada grupo. Cuando se adjunta una cláusula FILTER a una función de agregado, solo se pasan las filas coincidentes a esa función.

  • HAVING

    Predicados por los que se filtran las filas producidas por GROUP BY. La cláusula HAVING se usa para filtrar las filas después de realizar la agrupación. Si especifica HAVING sin GROUP BY, indica GROUP BY sin expresiones de agrupación (agregado global).

  • QUALIFY

    Predicados que se usan para filtrar los resultados de las funciones de ventana. Para usar QUALIFY, al menos una función de ventana debe estar presente en la lista SELECT o en la cláusula QUALIFY.

Selección en la tabla Delta

Además de las opciones SELECT estándar, las tablas Delta admiten las opciones de viaje en el tiempo que se describen en esta sección. Consulte Trabajar con el historial de tablas de Delta Lake para más información.

Sintaxis de AS OF

table_identifier TIMESTAMP AS OF timestamp_expression

table_identifier VERSION AS OF version
  • El valor de timestamp_expression puede ser uno de los siguientes:
    • '2018-10-18T22:15:12.013Z', es decir, una cadena que se puede convertir en una marca de tiempo
    • cast('2018-10-18 13:36:32 CEST' as timestamp)
    • '2018-10-18', es decir, una cadena de fecha.
    • current_timestamp() - interval 12 hours
    • date_sub(current_date(), 1)
    • Cualquier otra expresión que sea una marca de tiempo o se pueda convertir en una
  • version es un valor largo que se puede obtener de la salida de DESCRIBE HISTORY table_spec.

timestamp_expression ni version pueden ser subconsultas.

Ejemplo

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

> SELECT * FROM events VERSION AS OF 123

Sintaxis de @

Use la sintaxis @ para especificar la marca de tiempo o la versión. La marca de tiempo debe estar en formato yyyyMMddHHmmssSSS. Puede especificar una versión después de @ si antepone v a la versión. Por ejemplo, para consultar la versión 123 de la tabla events, especifique events@v123.

Ejemplo

> SELECT * FROM events@20190101000000000

> SELECT * FROM events@v123

Ejemplos

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