SELECT recuperan datos. De forma predeterminada, los datos solicitados se devuelven al cliente, pero, en combinación con INSERT INTO, pueden dirigirse a otra tabla.
Sintaxis
SELECT, que se explica con más detalle a continuación.
Los detalles de cada cláusula opcional se describen en secciones independientes, enumeradas en el mismo orden en que se ejecutan:
- cláusula WITH
- cláusula SELECT
- cláusula DISTINCT
- cláusula FROM
- cláusula SAMPLE
- cláusula JOIN
- cláusula PREWHERE
- cláusula WHERE
- cláusula WINDOW
- cláusula GROUP BY
- cláusula LIMIT BY
- cláusula HAVING
- cláusula QUALIFY
- cláusula LIMIT
- cláusula OFFSET
- cláusula UNION
- cláusula INTERSECT
- cláusula EXCEPT
- cláusula INTO OUTFILE
- cláusula FORMAT
Cláusula SELECT
SELECT se calculan una vez finalizadas todas las operaciones de las cláusulas descritas anteriormente. Estas expresiones funcionan como si se aplicaran a filas separadas del resultado. Si las expresiones de la cláusula SELECT contienen funciones de agregación, ClickHouse procesa las funciones de agregación y las expresiones utilizadas como sus argumentos durante la agregación GROUP BY.
Si desea incluir todas las columnas en el resultado, utilice el símbolo de asterisco (*). Por ejemplo, SELECT * FROM ....
Selección dinámica de columnas
a.
COLUMNS en una consulta y aplicarles funciones.
Por ejemplo:
COLUMNS se pasa a la función como un argumento independiente. También puedes pasar otros argumentos a la función si los admite. Ten cuidado al usar funciones. Si una función no admite la cantidad de argumentos que le has pasado, ClickHouse lanza una excepción.
Por ejemplo:
COLUMNS('a') devuelve dos columnas: aa y ab. COLUMNS('c') devuelve la columna bc. El operador + no puede aplicarse a 3 argumentos, por lo que ClickHouse genera una excepción con el mensaje correspondiente.
Las columnas que coinciden con la expresión COLUMNS pueden tener distintos tipos de datos. Si COLUMNS no coincide con ninguna columna y es la única expresión de SELECT, ClickHouse genera una excepción.
Asterisco
MATERIALIZED y ALIAS). Solo hay unos pocos casos en los que se justifica usar un asterisco:
- Al crear un volcado de una tabla.
- En tablas que contienen solo unas pocas columnas, como las tablas del sistema.
- Para obtener información sobre qué columnas hay en una tabla. En este caso, establezca
LIMIT 1. Pero es mejor usar la consultaDESC TABLE. - Cuando hay un filtrado intenso sobre un número reducido de columnas mediante
PREWHERE. - En subconsultas (ya que las columnas que no son necesarias para la consulta externa se excluyen de las subconsultas).
Valores extremos
XML, JSON*, TabSeparated*, CSV*, Vertical, Template y Pretty*, por separado del resto de las filas. No se muestran en otros formatos.
En los formatos JSON* y XML, los valores extremos se muestran en un campo independiente llamado ‘extremes’. En los formatos TabSeparated*, CSV* y Vertical, la fila aparece después del resultado principal, y después de ‘totals’ si está presente. Va precedida de una fila vacía (después de los demás datos). En los formatos Pretty*, la fila se muestra como una tabla independiente después del resultado principal, y después de totals si está presente. En el formato Template, los valores extremos se muestran según la plantilla especificada.
Los valores extremos se calculan para las filas anteriores a LIMIT, pero posteriores a LIMIT BY. Sin embargo, al usar LIMIT offset, size, las filas anteriores a offset se incluyen en extremes. En las solicitudes de flujo, el resultado también puede incluir un pequeño número de filas que pasaron por LIMIT.
Notas
AS) en cualquier parte de una consulta.
Las cláusulas GROUP BY, ORDER BY y LIMIT BY admiten argumentos posicionales. Para habilitarlos, active el ajuste enable_positional_arguments. Por ejemplo, ORDER BY 1,2 ordenará las filas de la tabla primero por la primera columna y luego por la segunda.
Detalles de implementación
DISTINCT, GROUP BY y ORDER BY, así como las subconsultas IN y JOIN, se procesará completamente en flujo, utilizando una cantidad O(1) de RAM. De lo contrario, podría consumir mucha RAM si no se especifican las restricciones adecuadas:
max_memory_usagemax_rows_to_group_bymax_rows_to_sortmax_rows_in_distinctmax_bytes_in_distinctmax_rows_in_setmax_bytes_in_setmax_rows_in_joinmax_bytes_in_joinmax_bytes_before_external_sortmax_bytes_ratio_before_external_sortmax_bytes_before_external_group_bymax_bytes_ratio_before_external_group_by
Modificadores de SELECT
SELECT.
Combinaciones de modificadores
SETTINGS en la consulta SELECT
SELECT. El valor de la configuración se aplica solo a esta consulta y se restablece al valor predeterminado o al valor anterior una vez ejecutada la consulta.
Para conocer otras formas de establecer configuraciones, consulte aquí.
En el caso de las configuraciones booleanas establecidas en true, puede usar una sintaxis abreviada omitiendo la asignación del valor. Cuando solo se especifica el nombre de la configuración, se establece automáticamente en 1 (true).
Ejemplo