Permet de se connecter à des bases de données hébergées sur un serveur MySQL distant et d’exécuter des requêtes INSERT et SELECT pour échanger des données entre ClickHouse et MySQL.
Le moteur de base de données MySQL traduit les requêtes pour le serveur MySQL, ce qui vous permet d’effectuer des opérations telles que SHOW TABLES ou SHOW CREATE TABLE.
Vous ne pouvez pas exécuter les requêtes suivantes :
RENAMECREATE TABLEALTER
Création d’une base de données
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')
[SETTINGS enable_compression=0]Paramètres du moteur
host:port— Adresse du serveur MySQL.database— Nom de la base de données distante.user— Utilisateur MySQL.password— Mot de passe de l’utilisateur.
Réglages
enable_compression
Active la compression zlib pour la connexion via le protocole MySQL. Lorsqu’elle est définie sur 1, ClickHouse demande au serveur MySQL une compression au niveau du protocole.
Valeur par défaut : 0.
Exemple :
CREATE DATABASE mysql_db
ENGINE = MySQL('localhost:3306', 'test', 'my_user', 'user_password')
SETTINGS enable_compression = 1;TLS/SSL
Les identifiants d'une connexion chiffrée à MySQL sont transmis sous forme de clés de collection nommée (ou d'arguments clé-valeur) :
| Paramètre | Description |
|---|---|
ssl_ca_pem |
Contenu du certificat de l'AC utilisé pour vérifier le certificat du serveur MySQL. |
ssl_cert_pem |
Contenu du certificat client, pour l'authentification par certificat. |
ssl_key_pem |
Contenu de la clé privée associée à ssl_cert_pem. |
Les valeurs correspondent au contenu des fichiers PEM associés, qui peut être copié dans une collection nommée ou dans une requête. Elles sont masquées dans les journaux et les requêtes SHOW, de la même manière que les mots de passe.
Les mêmes identifiants peuvent également être fournis sous forme de chemins vers des fichiers sur le serveur, dans ssl_ca, ssl_cert et ssl_key — mais uniquement dans une collection nommée définie dans le fichier de configuration du serveur ; une telle valeur ne peut pas être remplacée dans une requête. Le serveur ouvre ces fichiers avec ses propres privilèges. Accepter un chemin depuis SQL permettrait donc à tout utilisateur capable de définir une source MySQL d'explorer le système de fichiers local et de s'authentifier avec un certificat et une clé auxquels il n'est pas lui-même autorisé à accéder.
Prise en charge des types de données
| 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 conversion des types spatiaux (à l’exception de POINT, qui est toujours converti) est contrôlée par l’option geometry du paramètre mysql_datatypes_support_level, activée par défaut. Le type de colonne générique GEOMETRY est mappé au type englobant Geometry (un Variant des types géométriques concrets). Comme une telle colonne peut contenir une valeur de n’importe quel sous-type, la lecture d’une valeur dont le sous-type n’a pas d’équivalent dans ClickHouse (GEOMETRYCOLLECTION) déclenche une exception lors de la lecture ; cette incompatibilité est acceptée en contrepartie d’un type géométrique approprié. Les colonnes déclarées avec le type GEOMETRYCOLLECTION sont converties en String, comme tous les autres types de données MySQL.
Nullable est pris en charge. Une colonne spatiale est mappée à String (Nullable(String) si elle accepte les valeurs nulles) au lieu d’un type géométrique dans trois cas : elle est déclarée GEOMETRYCOLLECTION ; l’option geometry est désactivée et le type n’est pas POINT ; ou la colonne accepte les valeurs nulles et le type n’est pas POINT, car Point est le seul type géométrique qui peut être imbriqué dans Nullable. Dans les trois cas, la chaîne contient la valeur exactement telle que MySQL la renvoie : un préfixe SRID de 4 octets suivi du payload WKB. Supprimez donc ces 4 octets initiaux avant de la transmettre à un décodeur WKB.
Prise en charge des variables globales
Pour une meilleure compatibilité, vous pouvez référencer les variables globales dans le style MySQL, sous la forme @@identifier.
Ces variables sont prises en charge :
versionmax_allowed_packet
Exemple :
SELECT @@version;Exemples d’utilisation
Table dans 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 données ClickHouse échangeant des données avec le serveur 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 │
└────────┴───────┘