SELECT e INSERT en datos almacenados en un servidor MySQL remoto.
Crear una tabla
- Los nombres de las columnas deben ser los mismos que en la tabla MySQL original, pero puedes usar solo algunas de ellas y en cualquier orden.
- Los tipos de las columnas pueden diferir de los de la tabla MySQL original. ClickHouse intenta convertir los valores a los tipos de datos de ClickHouse.
- La configuración external_table_functions_use_nulls define cómo manejar las columnas Nullable. Valor predeterminado: 1. Si es 0, la función de tabla no crea columnas Nullable e inserta valores predeterminados en lugar de valores NULL. Esto también se aplica a los valores NULL dentro de arrays.
host:port— Dirección del servidor MySQL.database— Nombre de la base de datos remota.table— Nombre de la tabla remota, o una consulta pasada a MySQL tal cual (consulta Pasar una consulta en lugar de un nombre de tabla).user— usuario MySQL.password— Contraseña del usuario.replace_query— Indicador que convierte las consultasINSERT INTOenREPLACE INTO. Sireplace_query=1, la consulta se sustituye.on_duplicate_clause— La expresiónON DUPLICATE KEY on_duplicate_clauseque se añade a la consultaINSERT. Ejemplo:INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1, dondeon_duplicate_clauseesUPDATE c2 = c2 + 1. Consulta la documentación de MySQL para ver quéon_duplicate_clausepuedes usar con la cláusulaON DUPLICATE KEY. Para especificaron_duplicate_clause, debes pasar0al parámetroreplace_query. Si pasas simultáneamentereplace_query = 1yon_duplicate_clause, ClickHouse genera una excepción.
host y port deben especificarse por separado. Este enfoque se recomienda para entornos de producción.
Las cláusulas WHERE simples, como =, !=, >, >=, <, <=, se ejecutan 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 finaliza la consulta a MySQL.
TLS/SSL
Las credenciales de una conexión cifrada a MySQL se proporcionan como claves de una colección nombrada (o como argumentos de clave-valor):
Los valores son el contenido de los archivos PEM correspondientes, que se puede copiar en una colección nombrada 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 del servidor, mediante ssl_ca, ssl_cert y ssl_key, pero solo en una colección nombrada definida en el archivo de configuración del servidor; dichos valores no pueden 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 capaz de definir una fuente MySQL examinar 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 argumentotable puede ser una consulta SELECT que se envía a MySQL sin modificar. La estructura de la tabla se infiere a partir del resultado de la consulta. La consulta puede escribirse como una subconsulta o envolverse en la función query:
INSERT en ella. La función de tabla mysql admite la misma sintaxis.
La forma de subconsulta
(SELECT ...) la analiza ClickHouse y la vuelve a serializar en el dialecto de MySQL (identificadores entre acentos graves) antes de enviarla al servidor. Por lo tanto, debe ser válida en ClickHouse SQL. 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. de la consulta externa de ClickHouse no se hace pushdown en la consulta pasada; 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 pasada. Con external_table_strict_query = 1, un filtro externo sobre las columnas de la tabla se rechaza con una excepción en lugar de aplicarse localmente, porque no puede hacerse pushdown en la consulta pasada. La comprobación cubre el predicado WHERE de nivel superior y cada condición de un AND de nivel superior. Un PREWHERE sobre las columnas de esta tabla no es un caso para esta configuración: este motor de tabla no admite PREWHERE, y dicha consulta se rechaza con ILLEGAL_PREWHERE independientemente de la configuración. La comprobación se ejecuta solo 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 ni se realiza ninguna comprobación, 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 hace referencia a otras tablas unidas en la consulta externa no se hace pushdown y se excluye de la comprobación, tanto si hace referencia solo al lado unido como si lo mezcla con esta tabla dentro de una expresión que no es AND (por ejemplo, un OR); dicho predicado conserva su punto habitual de evaluación en ClickHouse (WHERE después del join, PREWHERE antes de él) y no se rechaza.|. Por ejemplo:
Ejemplo de uso
Crear una tabla en MySQL:Configuración
La configuración predeterminada no es muy eficiente, ya que ni siquiera reutiliza las conexiones. Estos ajustes permiten aumentar el número de consultas que el servidor ejecuta por segundo.connection_auto_close
Permite cerrar automáticamente la conexión después de ejecutar la consulta; es decir, desactiva la reutilización de la conexión.
Valores posibles:
- 1 — Se permite el cierre automático de la conexión, por lo que la reutilización de la conexión está desactivada
- 0 — No se permite el cierre automático de la conexión, por lo que la reutilización de la conexión está activada
1.
connection_max_tries
Establece el número de reintentos del pool con failover.
Valores posibles:
- Entero positivo.
- 0 — No hay reintentos para el pool con failover.
3.
connection_pool_size
Tamaño del pool de conexiones (si todas las conexiones están en uso, la consulta esperará hasta que se libere alguna).
Valores posibles:
- Entero positivo.
16.
connection_wait_timeout
Tiempo de espera (en segundos) para esperar a que haya una conexión libre (en caso de que ya haya connection_pool_size conexiones activas); 0: no esperar.
Valores posibles:
- Entero positivo.
5.
connect_timeout
Tiempo de espera de conexión (en segundos).
Valores posibles:
- Entero positivo.
10.
read_write_timeout
Tiempo de espera de lectura y escritura (en segundos).
Posibles valores:
- Entero positivo.
300.
enable_compression
Habilita la compresión para la conexión mediante el protocolo MySQL.
Valor predeterminado: false.
Esta configuración se aplica a:
- el motor de tabla
MySQL; - el motor de base de datos
MySQL; - la función de tabla
mysql; - las colecciones nombradas utilizadas por las integraciones de MySQL.