Skip to main content
Permite realizar consultas SELECT e INSERT sobre datos almacenados en un servidor MySQL remoto.

Sintaxis

Argumentos

Los argumentos también pueden pasarse mediante colecciones con nombre. En este caso, host y port deben especificarse por separado. Este enfoque se recomienda para entornos de producción. Las cláusulas WHERE simples, como =, !=, >, >=, <, <=, se ejecutan actualmente en el servidor MySQL. El resto de las condiciones y la restricción de muestreo LIMIT se ejecutan en ClickHouse solo después de que termina la consulta a MySQL.

TLS/SSL

Las credenciales de una conexión cifrada a MySQL se proporcionan como claves de una colección con nombre (o como argumentos clave-valor): Los valores son el contenido de los archivos PEM correspondientes, que puede copiarse en una colección con nombre o en una consulta. Se enmascaran en los logs y en las consultas SHOW, del mismo modo que las contraseñas. Las mismas credenciales también pueden proporcionarse como rutas a archivos en el servidor, mediante ssl_ca, ssl_cert y ssl_key, pero solo en una colección con nombre definida en el archivo de configuración del servidor; ese valor no puede sobrescribirse en una consulta. El servidor abre esos archivos con sus propios privilegios, por lo que aceptar una ruta desde SQL permitiría a cualquier usuario que pueda definir una fuente MySQL explorar el sistema de archivos local y autenticarse con un certificado y una clave que no tiene permiso para leer.

Pasar una consulta en lugar del nombre de una tabla

En lugar del nombre de una tabla, el tercer argumento puede ser una consulta SELECT que se pasa a MySQL tal cual. La estructura de la tabla resultante se infiere del resultado de la consulta. La consulta puede escribirse como una subconsulta o ir envuelta en la función query:
Esto es útil para hacer pushdown de joins, agregaciones o cualquier otro procesamiento a MySQL. Esta tabla es de solo lectura: no se permite hacer INSERT en ella. La misma sintaxis es compatible con el motor de tabla MySQL.
La forma de subconsulta (SELECT ...) es analizada por ClickHouse y serializada de nuevo en el dialecto de MySQL (comillas invertidas para los identificadores) antes de enviarse al servidor. Por lo tanto, debe ser SQL válido de ClickHouse. Para pasar sintaxis específica de MySQL que ClickHouse no analiza, use la forma query('...'), cuyo texto se envía a MySQL literalmente.Cualquier WHERE, LIMIT, agregación, etc. externo de la consulta de ClickHouse que la contiene no se hace pushdown a la consulta proporcionada; se aplica en ClickHouse después de recuperar el resultado completo de la consulta. Para restringir los datos leídos desde MySQL, coloque el filtro dentro de la consulta proporcionada. Con external_table_strict_query = 1, un filtro externo sobre las columnas de la función de tabla se rechaza con una excepción en lugar de aplicarse localmente, porque no puede insertarse en la consulta proporcionada. La comprobación abarca el predicado WHERE de nivel superior y cada conjunción de un AND de nivel superior. Un PREWHERE sobre las columnas de esta tabla no es un caso para este SETTING: este motor de tabla no admite PREWHERE, y una consulta así se rechaza con ILLEGAL_PREWHERE independientemente del SETTING. La comprobación solo se ejecuta donde un filtro podría hacerse pushdown: cuando esta tabla es la única tabla de la consulta, en cualquiera de los lados de un INNER JOIN, o en el lado preservado de un outer join (el lado izquierdo de un LEFT JOIN, el lado derecho de un RIGHT JOIN). En el lado no preservado de un LEFT/RIGHT JOIN y en cualquiera de los lados de un FULL JOIN no se hace pushdown de nada ni se comprueba nada, por lo que un filtro sobre las columnas de esta tabla se aplica localmente después del join incluso en modo estricto. Donde se ejecuta la comprobación, un predicado que referencia otras tablas unidas en la consulta que la contiene no se hace pushdown y queda excluido de la comprobación, tanto si referencia solo el lado unido como si lo mezcla con esta tabla dentro de una única expresión que no sea AND (por ejemplo un OR); dicho predicado conserva su punto de evaluación habitual en ClickHouse (WHERE después del join, PREWHERE antes) y no se rechaza.
Admite varias réplicas que deben listarse con |. Por ejemplo:
or

Valor devuelto

Un objeto de tabla con las mismas columnas que la tabla original de MySQL.
Algunos tipos de datos de MySQL pueden asignarse a distintos tipos de ClickHouse; esto se resuelve mediante la configuración a nivel de consulta mysql_datatypes_support_level
En la consulta INSERT, para distinguir la función de tabla mysql(...) del nombre de tabla con la lista de nombres de columnas, debe usar las palabras clave FUNCTION o TABLE FUNCTION. Vea los ejemplos a continuación.

Ejemplos

Tabla en MySQL:
Selección de datos de ClickHouse:
O bien, usando colecciones con nombre:

enable_compression

Habilita la compresión para la conexión mediante el protocolo MySQL. Valor predeterminado: false. Esta configuración se aplica a:
  • la función de tabla mysql;
  • el motor de tabla MySQL;
  • el engine de base de datos MySQL;
  • las colecciones con nombre usadas por las integraciones de MySQL.
Cuando está habilitada, ClickHouse solicita compresión para la conexión. Ejemplo:
Reemplazo e inserción:
Copiar datos desde una tabla de MySQL a una tabla de ClickHouse:
O, si copias solo un lote incremental desde MySQL tomando como referencia el id máximo actual:

Relacionado

Última modificación el 26 de septiembre de 2026