Skip to main content
Permet d’exécuter des requêtes SELECT et INSERT sur des données stockées sur un serveur MySQL distant.

Syntaxe

Arguments

Les arguments peuvent également être transmis à l’aide de collections nommées. Dans ce cas, host et port doivent être spécifiés séparément. Cette approche est recommandée en environnement de production. Les clauses WHERE simples telles que =, !=, >, >=, <, <= sont actuellement exécutées sur le serveur MySQL. Le reste des conditions et la contrainte d’échantillonnage LIMIT ne sont exécutés dans ClickHouse qu’une fois la requête MySQL terminée.

TLS/SSL

Les identifiants d’une connexion chiffrée à MySQL sont transmis sous forme de clés d’une collection nommée (ou d’arguments clé-valeur) : Les valeurs correspondent au contenu des fichiers PEM correspondants, qui peut être copié dans une collection nommée ou dans une requête. Elles sont masquées dans les logs et dans les requêtes SHOW, comme 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 autorisé à accéder.

Utilisation d’une requête à la place d’un nom de table

À la place d’un nom de table, le troisième argument peut être une requête SELECT transmise à MySQL telle quelle. La structure de la table résultante est inférée à partir du résultat de la requête. La requête peut être écrite soit sous forme de sous-requête, soit encapsulée dans la fonction query :
Cela est utile pour déporter vers MySQL les jointures, agrégations ou tout autre traitement. Une telle table est en lecture seule : INSERT n’y est pas autorisé. La même syntaxe est prise en charge par le moteur de table MySQL.
La forme de sous-requête (SELECT ...) est analysée par ClickHouse, puis re-sérialisée dans le dialecte MySQL (identifiants délimités par des accents graves) avant d’être envoyée au serveur. Elle doit donc être valide en ClickHouse SQL. Pour transmettre une syntaxe propre à MySQL que ClickHouse n’analyse pas, utilisez la forme query('...'), dont le texte est envoyé à MySQL tel quel.Tout WHERE, LIMIT, agrégation, etc. externe de la requête ClickHouse englobante n’est pas déporté dans la requête transmise — il est appliqué dans ClickHouse après récupération du résultat complet de la requête. Pour restreindre les données lues depuis MySQL, placez le filtre dans la requête transmise. Avec external_table_strict_query = 1, un filtre externe qui ne peut pas être déporté est rejeté avec une exception au lieu d’être appliqué localement.
Prend en charge plusieurs répliques, qui doivent être listées à l’aide de |. Par exemple :
ou

Valeur retournée

Un objet de table avec les mêmes colonnes que la table MySQL d’origine.
Certains types de données MySQL peuvent correspondre à différents types de ClickHouse ; cela est géré par le paramètre au niveau de la requête mysql_datatypes_support_level
Dans la requête INSERT, pour distinguer la fonction de table mysql(...) d’un nom de table accompagné d’une liste de noms de colonnes, vous devez utiliser les mots-clés FUNCTION ou TABLE FUNCTION. Voir les exemples ci-dessous.

Exemples

Table dans MySQL :
Sélection de données dans ClickHouse :
Ou avec les collections nommées :

enable_compression

Active la compression pour les connexions via le protocole MySQL. Valeur par défaut : false. Ce paramètre s’applique à :
  • la fonction de table mysql ;
  • le moteur de table MySQL ;
  • le moteur de base de données MySQL ;
  • les collections nommées utilisées par les intégrations MySQL.
Lorsqu’il est activé, ClickHouse demande la compression pour cette connexion. Exemple :
Remplacement et insertion :
Copie des données d’une table MySQL vers une table ClickHouse :
Ou, si vous copiez uniquement un lot incrémentiel depuis MySQL en vous basant sur l’ID maximal actuel :
Dernière modification le 14 août 2026