Permite conectarse a bases de datos en un servidor MySQL remoto y realizar consultas INSERT y SELECT para intercambiar datos entre ClickHouse y MySQL.
El motor de base de datos MySQL traduce las consultas para el servidor MySQL, por lo que puede realizar operaciones como SHOW TABLES o SHOW CREATE TABLE.
No se pueden realizar las siguientes consultas:
RENAMECREATE TABLEALTER
Creación de una base de datos
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]Parámetros del motor
host:port— Dirección del servidor MySQL.database— Nombre de la base de datos remota.user— Usuario de MySQL.password— Contraseña del usuario.
Configuración
enable_compression
Habilita la compresión zlib para la conexión del protocolo MySQL. Cuando se establece en 1, ClickHouse solicita al servidor MySQL compresión a nivel de protocolo.
Valor predeterminado: 0.
Ejemplo:
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;TLS/SSL
Las credenciales de una conexión cifrada a MySQL se proporcionan como claves de una colección con nombre (o como argumentos de clave-valor):
| Parámetro | Descripción |
|---|---|
ssl_ca_pem |
Contenido del certificado de CA con el que se verifica el certificado del servidor MySQL. |
ssl_cert_pem |
Contenido del certificado de client para la autenticación basada en certificados. |
ssl_key_pem |
Contenido de la clave privada asociada a ssl_cert_pem. |
Los valores corresponden al contenido de los archivos PEM respectivos, que se puede copiar en una colección con nombre o en una consulta. Se enmascaran en los registros y en las consultas SHOW, al igual que las contraseñas.
Las mismas credenciales también se pueden proporcionar como rutas de 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; dicho valor no se puede sobrescribir 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 de leer.
Compatibilidad de tipos de datos
| MySQL | ClickHouse |
|---|---|
| UNSIGNED TINYINT | UInt8 |
| TINYINT | Int8 |
| UNSIGNED SMALLINT | UInt16 |
| SMALLINT | Int16 |
| UNSIGNED INT, UNSIGNED MEDIUMINT | UInt32 |
| INT, MEDIUMINT | Int32 |
| UNSIGNED BIGINT | UInt64 |
| BIGINT | Int64 |
| FLOAT | Float32 |
| DOUBLE | Float64 |
| DATE | Date |
| DATETIME, TIMESTAMP | DateTime |
| BINARY | FixedString |
| POINT | Point |
| LINESTRING | LineString |
| POLYGON | Polygon |
| MULTILINESTRING | MultiLineString |
| MULTIPOLYGON | MultiPolygon |
| MULTIPOINT | MultiPoint |
| GEOMETRY | Geometry |
La conversión de los tipos espaciales (excepto POINT, que siempre se convierte) se controla mediante el indicador geometry de la configuración mysql_datatypes_support_level, habilitada de forma predeterminada. El tipo de columna genérico GEOMETRY se asigna al tipo abarcador Geometry (un Variant sobre los tipos geométricos concretos). Dado que dicha columna puede contener un valor de cualquier subtipo, leer un valor cuyo subtipo no tiene equivalente en ClickHouse (GEOMETRYCOLLECTION) genera una excepción durante la lectura; esta incompatibilidad se acepta a cambio de disponer de un tipo geométrico adecuado. Las columnas declaradas con el tipo GEOMETRYCOLLECTION se convierten a String, al igual que todos los demás tipos de datos de MySQL.
Se admite Nullable. Una columna espacial se asigna a String (Nullable(String) si admite valores nulos) en tres casos: se declara como GEOMETRYCOLLECTION; el indicador geometry está deshabilitado y el tipo no es POINT; o la columna admite valores nulos y el tipo no es POINT, ya que Point es el único tipo geométrico que puede anidarse dentro de Nullable. En los tres casos, la cadena contiene el valor exactamente como lo devuelve MySQL: un prefijo SRID de 4 bytes seguido de la carga útil WKB, por lo que debe eliminar esos 4 bytes iniciales antes de pasarlo a un decodificador WKB.
Compatibilidad con las variables globales
Para mejorar la compatibilidad, puede hacer referencia a las variables globales al estilo de MySQL, como @@identifier.
Se admiten estas variables:
versionmax_allowed_packet
Ejemplo:
SELECT @@version;Ejemplos de uso
Tabla en MySQL:
mysql> USE test;
Database changed
mysql> CREATE TABLE `mysql_table` (
-> `int_id` INT NOT NULL AUTO_INCREMENT,
-> `float` FLOAT NOT NULL,
-> PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)
mysql> insert into mysql_table (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from mysql_table;
+------+-----+
| int_id | value |
+------+-----+
| 1 | 2 |
+------+-----+
1 row in set (0,00 sec)Base de datos de ClickHouse que intercambia datos con el servidor MySQL:
CREATE DATABASE mysql_db ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password') SETTINGS read_write_timeout=10000, connect_timeout=100;SHOW DATABASES┌─name─────┐
│ default │
│ mysql_db │
│ system │
└──────────┘SHOW TABLES FROM mysql_db┌─name─────────┐
│ mysql_table │
└──────────────┘SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐
│ 1 │ 2 │
└────────┴───────┘INSERT INTO mysql_db.mysql_table VALUES (3,4)SELECT * FROM mysql_db.mysql_table┌─int_id─┬─value─┐
│ 1 │ 2 │
│ 3 │ 4 │
└────────┴───────┘