Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

MySQL

Non pris en charge par ClickHouse Cloud

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;

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 :

  • version
  • max_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 │
└────────┴───────┘
Navigation