La cláusula FROM especifica la fuente desde la que se leen los datos:
Las cláusulas JOIN y ARRAY JOIN también pueden usarse para ampliar la funcionalidad de la cláusula FROM.
Una subconsulta es otra consulta SELECT que puede especificarse entre paréntesis dentro de la cláusula FROM.
Una cláusula VALUES estándar de SQL también puede utilizarse como expresión de tabla:
SELECT * FROM (VALUES (1, 'a'), (2, 'b'), (3, 'c')) AS t(id, val);
Consulta la función de tabla Values para obtener más detalles.
FROM puede contener varias fuentes de datos separadas por comas, lo que equivale a realizar un CROSS JOIN entre ellas.
FROM también puede aparecer antes de una cláusula SELECT. Esta es una extensión de ClickHouse al SQL estándar que facilita la lectura de las sentencias SELECT. Ejemplo:
Cuando se especifica FINAL, ClickHouse fusiona por completo los datos antes de devolver el resultado. Esto también aplica todas las transformaciones de datos que se producen durante las fusiones del motor de tabla correspondiente.
Se aplica al seleccionar datos de tablas que usan los siguientes motores de tabla:
ReplacingMergeTree
SummingMergeTree
AggregatingMergeTree
CollapsingMergeTree
VersionedCollapsingMergeTree
Las consultas SELECT con FINAL se ejecutan en paralelo. La configuración max_final_threads limita el número de hilos utilizados.
Las consultas que usan FINAL se ejecutan ligeramente más lento que consultas similares que no usan FINAL porque:
- Los datos se fusionan durante la ejecución de la consulta.
- Las consultas con
FINAL pueden leer las columnas de la clave primaria, además de las columnas especificadas en la consulta.
FINAL requiere recursos adicionales de cómputo y memoria, porque el procesamiento que normalmente ocurriría durante la fusión debe realizarse en memoria en el momento de la consulta. Sin embargo, a veces es necesario usar FINAL para obtener resultados precisos (ya que puede que los datos aún no se hayan fusionado por completo). Es menos costoso que ejecutar OPTIMIZE para forzar una fusión.
Como alternativa a usar FINAL, a veces es posible utilizar consultas distintas que asumen que los procesos en segundo plano del engine MergeTree aún no se han producido y manejarlo aplicando una agregación (por ejemplo, para descartar duplicados). Si necesitas usar FINAL en tus consultas para obtener los resultados requeridos, no hay problema en hacerlo, pero ten en cuenta el procesamiento adicional que requiere.
FINAL puede aplicarse automáticamente mediante la configuración FINAL a todas las tablas de una consulta usando una sesión o un perfil de usuario.
Uso de la palabra clave FINAL
SELECT x, y FROM mytable FINAL WHERE x > 1;
Uso de FINAL como configuración de consulta
SELECT x, y FROM mytable WHERE x > 1 SETTINGS final = 1;
Uso de FINAL como configuración de sesión
SET final = 1;
SELECT x, y FROM mytable WHERE x > 1;
Detalles de implementación
Si se omite la cláusula FROM, los datos se leerán de la tabla system.one.
La tabla system.one contiene exactamente una fila (esta tabla cumple la misma función que la tabla DUAL de otros DBMS).
Para ejecutar una consulta, todas las columnas incluidas en la consulta se extraen de la tabla correspondiente. Las columnas que no son necesarias para la consulta externa se descartan de las subconsultas.
Si una consulta no incluye ninguna columna (por ejemplo, SELECT count() FROM t), de todos modos se extrae alguna columna de la tabla (preferiblemente la más pequeña) para calcular el número de filas. Última modificación el 10 de junio de 2026