Passer au contenu principal
ClickHouse permet d’envoyer à un serveur les données nécessaires au traitement d’une requête, avec une requête SELECT. Ces données sont placées dans une table temporaire (voir la section “Tables temporaires”) et peuvent être utilisées dans la requête (par exemple, avec des opérateurs IN). Par exemple, si vous disposez d’un fichier texte contenant des identifiants utilisateur importants, vous pouvez l’envoyer au serveur avec une requête qui filtre selon cette liste. Si vous devez exécuter plusieurs requêtes avec un volume important de données externes, n’utilisez pas cette fonctionnalité. Il est préférable de charger les données dans la DB à l’avance. Les données externes peuvent être envoyées à l’aide du client en ligne de commande (en mode non interactif) ou via l’interface HTTP. Dans le client en ligne de commande, vous pouvez spécifier une section de paramètres au format
--external --file=... [--name=...] [--format=...] [--types=...|--structure=...]
Vous pouvez avoir plusieurs sections comme celle-ci, en fonction du nombre de tables transmises. –external – Marque le début d’une clause. –file – Chemin vers le fichier contenant le dump de la table, ou -, qui fait référence à stdin. Une seule table peut être lue depuis stdin. Les paramètres suivants sont facultatifs : –name– Nom de la table. S’il est omis, _data est utilisé. –format – Format des données dans le fichier. S’il est omis, TabSeparated est utilisé. L’un des paramètres suivants est requis :–types – Une liste de types de colonnes séparés par des virgules. Par exemple : UInt64,String. Les colonnes seront nommées _1, _2, … –structure– La structure de la table au formatUserID UInt64, URL String. Définit les noms et les types des colonnes. Les fichiers spécifiés dans ‘file’ seront analysés selon le format spécifié dans ‘format’, à l’aide des types de données spécifiés dans ‘types’ ou ‘structure’. La table sera téléversée vers le serveur et y sera accessible en tant que table temporaire sous le nom indiqué dans ‘name’. Exemples :
$ echo -ne "1\n2\n3\n" | clickhouse-client --query="SELECT count() FROM test.visits WHERE TraficSourceID IN _data" --external --file=- --types=Int8
849897
$ cat /etc/passwd | sed 's/:/\t/g' | clickhouse-client --query="SELECT shell, count() AS c FROM passwd GROUP BY shell ORDER BY c DESC" --external --file=- --name=passwd --structure='login String, unused String, uid UInt16, gid UInt16, comment String, home String, shell String'
/bin/sh 20
/bin/false      5
/bin/bash       4
/usr/sbin/nologin       1
/bin/sync       1
Lors de l’utilisation de l’interface HTTP, les données externes sont transmises au format multipart/form-data. Chaque table est envoyée sous la forme d’un fichier distinct. Le nom de la table est déduit du nom du fichier. query_string reçoit les paramètres name_format, name_types et name_structure, où name désigne le nom de la table à laquelle ces paramètres correspondent. La signification de ces paramètres est la même que lors de l’utilisation du client en ligne de commande. Exemple :
$ cat /etc/passwd | sed 's/:/\t/g' > passwd.tsv

$ curl -F 'passwd=@passwd.tsv;' 'http://localhost:8123/?query=SELECT+shell,+count()+AS+c+FROM+passwd+GROUP+BY+shell+ORDER+BY+c+DESC&passwd_structure=login+String,+unused+String,+uid+UInt16,+gid+UInt16,+comment+String,+home+String,+shell+String'
/bin/sh 20
/bin/false      5
/bin/bash       4
/usr/sbin/nologin       1
/bin/sync       1
Dans le cadre du traitement distribué des requêtes, les tables temporaires sont envoyées à tous les serveurs distants.
Dernière modification le 29 juin 2026