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 es obligatoria; todas las demás cláusulas son opcionales.
SELECT y sus cláusulas opcionales se describen en secciones independientes:
- cláusula WITH
- cláusula SELECT
- cláusula ALL
- cláusula DISTINCT
- cláusula FROM
- cláusula SAMPLE
- cláusula ARRAY JOIN
- cláusula JOIN
- cláusula PREWHERE
- cláusula WHERE
- cláusula GROUP BY
- cláusula HAVING
- cláusula WINDOW
- cláusula QUALIFY
- cláusula ORDER BY
- cláusula LIMIT BY
- 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
Las expresiones especificadas en la cláusulaSELECT 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
La selección dinámica de columnas (también conocida como expresión COLUMNS) permite hacer coincidir algunas columnas de un resultado con una expresión regular re2.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.
Seleccionar columnas con LIKE o ILIKE
También puede seleccionar columnas haciendo que sus nombres coincidan con un patrón después de *, usando LIKE, sensible a mayúsculas y minúsculas, o ILIKE, que no distingue entre mayúsculas y minúsculas:
LIKE e ILIKE siguen la semántica de LIKE, no la de las expresiones regulares. El carácter % coincide con cualquier secuencia de caracteres, el carácter _ coincide con cualquier carácter individual y \ escapa %, _ y \. La única diferencia entre ambos es que LIKE hace coincidir los nombres de columna de forma sensible a mayúsculas y minúsculas, mientras que ILIKE no distingue entre mayúsculas y minúsculas. Por ejemplo:
a, como aa y ab.
* LIKE y * ILIKE también admiten asteriscos calificados y transformadores de columnas:
Asterisco
Se puede poner un asterisco en cualquier parte de una consulta en lugar de una expresión. Cuando se analiza la consulta, el asterisco se expande a una lista de todas las columnas de la tabla (excepto las columnasMATERIALIZED 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
Además de los resultados, también puede obtener los valores mínimos y máximos de las columnas del resultado. Para ello, establezca el SETTING extremes en 1. Los valores mínimos y máximos se calculan para tipos numéricos, fechas y fechas con hora. Para las demás columnas, se muestran los valores predeterminados. Se calculan dos filas adicionales: una con los mínimos y otra con los máximos. Estas dos filas adicionales se muestran en los formatosXML, 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. Un intervalo LIMIT ... AFTER ... UNTIL se comporta aquí como LIMIT: los valores extremos se calculan sobre las filas leídas antes de aplicar el intervalo. En las solicitudes de flujo, el resultado también puede incluir un pequeño número de filas que pasaron por LIMIT.
Notas
Puede utilizar sinónimos (aliasAS) 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
Si la consulta omite las cláusulasDISTINCT, 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
Puede utilizar los siguientes modificadores en las consultasSELECT.
Combinaciones de modificadores
Puedes usar cada modificador por separado o combinarlos. Ejemplos: Uso del mismo modificador varias veces.SETTINGS en la consulta SELECT
Puede especificar la configuración necesaria directamente en la consultaSELECT. 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