Позволяет одновременно обрабатывать файлы, соответствующие указанному пути, на нескольких узлах кластера. Инициатор устанавливает соединения с узлами-воркерами, раскрывает глоб-шаблоны в пути к файлу и делегирует задачи чтения файлов узлам-воркерам. Каждый узел-воркер запрашивает у инициатора следующий файл для обработки и повторяет это до тех пор, пока не будут выполнены все задачи (то есть пока не будут прочитаны все файлы).
Эта функция будет работать корректно только в том случае, если набор файлов, соответствующих исходно указанному пути, одинаков на всех узлах, а их содержимое согласовано между узлами.
Если эти файлы различаются на разных узлах, возвращаемое значение нельзя определить заранее: оно зависит от того, в каком порядке узлы-воркеры запрашивают задачи у инициатора.
fileCluster(cluster_name, path[, format, structure, compression_method])
| Аргумент | Описание |
|---|
cluster_name | Имя кластера, используемое для построения набора адресов и параметров подключения к удалённым и локальным серверам. |
path | Относительный путь к файлу из user_files_path. Путь к файлу также поддерживает глоб-шаблоны. |
format | Формат файлов. Тип: String. |
structure | Структура таблицы в формате 'UserID UInt64, Name String'. Определяет имена столбцов и типы. Тип: String. |
compression_method | Метод сжатия. Поддерживаются следующие типы сжатия: gz, br, xz, zst, lz4 и bz2. |
Таблица с указанными форматом и структурой, содержащая данные из файлов, соответствующих указанному пути.
Пример
Для кластера с именем my_cluster и при следующем значении настройки user_files_path:
$ grep user_files_path /etc/clickhouse-server/config.xml
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
Также, если в user_files_path каждого узла кластера находятся файлы test1.csv и test2.csv, а их содержимое одинаково на всех узлах:
$ cat /var/lib/clickhouse/user_files/test1.csv
1,"file1"
11,"file11"
$ cat /var/lib/clickhouse/user_files/test2.csv
2,"file2"
22,"file22"
Например, эти файлы можно создать, выполнив на каждом узле кластера два следующих запроса:
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');
Теперь прочитайте данные из test1.csv и test2.csv с помощью табличной функции 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 │
└────┴────────┘
Все шаблоны, поддерживаемые табличной функцией File, также поддерживаются в FileCluster.
Последнее изменение 10 июня 2026 г.