Passer au contenu principal

Moteur de base de données MySQL

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 :
  • RENAME
  • CREATE TABLE
  • ALTER

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;

Prise en charge des types de données

MySQLClickHouse
UNSIGNED TINYINTUInt8
TINYINTInt8
UNSIGNED SMALLINTUInt16
SMALLINTInt16
UNSIGNED INT, UNSIGNED MEDIUMINTUInt32
INT, MEDIUMINTInt32
UNSIGNED BIGINTUInt64
BIGINTInt64
FLOATFloat32
DOUBLEFloat64
DATEDate
DATETIME, TIMESTAMPDateTime
BINARYFixedString
Tous les autres types de données MySQL sont convertis en String. Nullable est pris en charge.

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 :
  • version
  • max_allowed_packet
À ce jour, ces variables sont des stubs et ne correspondent à rien.
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 │
└────────┴───────┘
Dernière modification le 29 juin 2026