Permet le traitement simultané des fichiers correspondant à un chemin spécifié sur plusieurs nœuds d’un cluster. L’initiateur établit des connexions avec les nœuds worker, développe les globs dans le chemin de fichier et délègue aux nœuds worker les tâches de lecture des fichiers. Chaque nœud worker interroge l’initiateur pour obtenir le fichier suivant à traiter, et répète l’opération jusqu’à ce que toutes les tâches soient terminées (tous les fichiers sont lus).
Cette fonction ne fonctionne correctement que si l’ensemble des fichiers correspondant au chemin initialement spécifié est identique sur tous les nœuds et si leur contenu est cohérent d’un nœud à l’autre.
Si ces fichiers diffèrent d’un nœud à l’autre, la valeur de retour ne peut pas être déterminée à l’avance et dépend de l’ordre dans lequel les nœuds worker demandent des tâches à l’initiateur.
fileCluster(cluster_name, path[, format, structure, compression_method])
| Argument | Description |
|---|
cluster_name | Nom d’un cluster servant à constituer un ensemble d’adresses et de paramètres de connexion pour les serveurs distants et locaux. |
path | Chemin relatif vers le fichier à partir de user_files_path. Le chemin du fichier prend également en charge les globs. |
format | Format des fichiers. Type : String. |
structure | Structure de la table au format 'UserID UInt64, Name String'. Détermine les noms et les types des colonnes. Type : String. |
compression_method | Méthode de compression. Les types de compression pris en charge sont gz, br, xz, zst, lz4 et bz2. |
Une table au format et à la structure spécifiés, contenant les données des fichiers correspondant au chemin indiqué.
Exemple
Étant donné un cluster nommé my_cluster et la valeur suivante du paramètre user_files_path :
$ grep user_files_path /etc/clickhouse-server/config.xml
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
De plus, si les fichiers test1.csv et test2.csv sont présents dans le user_files_path de chaque nœud du cluster et que leur contenu est identique sur tous les nœuds :
$ cat /var/lib/clickhouse/user_files/test1.csv
1,"file1"
11,"file11"
$ cat /var/lib/clickhouse/user_files/test2.csv
2,"file2"
22,"file22"
Par exemple, il est possible de créer ces fichiers en exécutant ces deux requêtes sur chaque nœud du cluster :
INSERT INTO TABLE FUNCTION file('file1.csv', 'CSV', 'i UInt32, s String') VALUES (1,'file1'), (11,'file11');
INSERT INTO TABLE FUNCTION file('file2.csv', 'CSV', 'i UInt32, s String') VALUES (2,'file2'), (22,'file22');
À présent, lisez le contenu de test1.csv et test2.csv à l’aide de la fonction de table fileCluster :
SELECT * FROM fileCluster('my_cluster', 'file{1,2}.csv', 'CSV', 'i UInt32, s String') ORDER BY i, s
┌──i─┬─s──────┐
│ 1 │ file1 │
│ 11 │ file11 │
└────┴────────┘
┌──i─┬─s──────┐
│ 2 │ file2 │
│ 22 │ file22 │
└────┴────────┘
FileCluster prend en charge tous les motifs gérés par la fonction de table File.