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.

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 :
or

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 23 juillet 2026