SELECT et INSERT sur des données stockées sur un serveur MySQL distant.
Créer une table
- Les noms des colonnes doivent être les mêmes que dans la table MySQL d’origine, mais vous pouvez n’utiliser que certaines de ces colonnes, dans n’importe quel ordre.
- Les types de colonnes peuvent différer de ceux de la table MySQL d’origine. ClickHouse essaie de convertir les valeurs dans les types de données ClickHouse.
- Le paramètre external_table_functions_use_nulls définit comment gérer les colonnes Nullable. Valeur par défaut : 1. Si sa valeur est 0, la fonction de table ne crée pas de colonnes Nullable et insère des valeurs par défaut à la place des valeurs NULL. Cela s’applique également aux valeurs NULL à l’intérieur des arrays.
host:port— Adresse du serveur MySQL.database— Nom de la base de données distante.table— Nom de la table distante, ou requête transmise telle quelle à MySQL (voir Passer une requête au lieu d’un nom de table).user— Utilisateur MySQL.password— Mot de passe de l’utilisateur.replace_query— Option qui convertit les requêtesINSERT INTOenREPLACE INTO. Sireplace_query=1, la requête est remplacée.on_duplicate_clause— ExpressionON DUPLICATE KEY on_duplicate_clauseajoutée à la requêteINSERT. Exemple :INSERT INTO t (c1,c2) VALUES ('a', 2) ON DUPLICATE KEY UPDATE c2 = c2 + 1, oùon_duplicate_clausevautUPDATE c2 = c2 + 1. Consultez la documentation MySQL pour savoir quelles valeurs deon_duplicate_clausevous pouvez utiliser avec la clauseON DUPLICATE KEY. Pour spécifieron_duplicate_clause, vous devez passer0au paramètrereplace_query. Si vous passez simultanémentreplace_query = 1eton_duplicate_clause, ClickHouse génère une exception.
host et port doivent être spécifiés séparément. Cette approche est recommandée en production.
Les clauses WHERE simples telles que =, !=, >, >=, <, <= sont 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 vers MySQL terminée.
Passer une requête au lieu d’un nom de table
table peut être une requête SELECT transmise telle quelle à MySQL. La structure de la table est déduite 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 :
INSERT n’y est pas autorisé. La même syntaxe est prise en charge par la fonction de table mysql.
La forme de sous-requête
(SELECT ...) est analysée par ClickHouse, puis re-sérialisée dans le dialecte MySQL (quotage des identifiants avec 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é tel quel à MySQL.Tout WHERE, LIMIT, toute agrégation, etc. externe de la requête ClickHouse englobante n’est pas poussé dans la requête transmise — il est appliqué dans ClickHouse après récupération du résultat complet de la requête. Pour limiter 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 poussé est rejeté avec une exception au lieu d’être appliqué localement.|. Par exemple :
Exemple d’utilisation
Paramètres
connection_auto_close
- 1 — La fermeture automatique de la connexion est autorisée, donc sa réutilisation est désactivée
- 0 — La fermeture automatique de la connexion n’est pas autorisée, donc sa réutilisation est activée
1.
connection_max_tries
- Entier positif.
- 0 — Aucune tentative pour le pool avec basculement.
3.
connection_pool_size
- Entier positif.
16.
connection_wait_timeout
connection_pool_size connexions actives), 0 - ne pas attendre.
Valeurs possibles :
- Entier positif.
5.
connect_timeout
- Entier positif.
10.
read_write_timeout
- Entier positif.
300.
enable_compression
false.
Ce paramètre s’applique à :
- le moteur de table
MySQL; - le moteur de base de données
MySQL; - la fonction de table
mysql; - les collections nommées utilisées par les intégrations MySQL.