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
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
| 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 |
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 :
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;
┌─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 │
└────────┴───────┘