Перейти к основному содержанию
Перейти к основному содержанию

Табличная функция hdfsCluster

Позволяет обрабатывать файлы из HDFS параллельно с множества узлов в указанном кластере. На инициирующем узле создаётся соединение со всеми узлами кластера, раскрываются символы * в пути к файлам HDFS, и каждый файл динамически распределяется по узлам. Рабочий узел запрашивает у инициирующего узла следующую задачу и обрабатывает её. Это повторяется до тех пор, пока все задачи не будут выполнены.

Синтаксис

hdfsCluster(cluster_name, URI, format, structure)

Аргументы

АргументОписание
cluster_nameИмя кластера, используемое для построения набора адресов и параметров подключения к удалённым и локальным серверам.
URIURI файла или группы файлов. Поддерживает следующие подстановочные шаблоны в режиме только для чтения: *, **, ?, {'abc','def'} и {N..M}, где N, M — числа, abc, def — строки. Для получения дополнительной информации см. подстановочные шаблоны в пути.
formatФормат файла.
structureСтруктура таблицы. Формат: 'column1_name column1_type, column2_name column2_type, ...'.

Возвращаемое значение

Таблица с указанной структурой, предназначенная для чтения данных из указанного файла.

Примеры

  1. Предположим, что у нас есть кластер ClickHouse с именем cluster_simple и несколько файлов со следующими URI в HDFS:
  • 'hdfs://hdfs1:9000/some_dir/some_file_1'
  • 'hdfs://hdfs1:9000/some_dir/some_file_2'
  • 'hdfs://hdfs1:9000/some_dir/some_file_3'
  • 'hdfs://hdfs1:9000/another_dir/some_file_1'
  • 'hdfs://hdfs1:9000/another_dir/some_file_2'
  • 'hdfs://hdfs1:9000/another_dir/some_file_3'
  1. Выполните запрос для подсчёта количества строк в этих файлах:
SELECT count(*)
FROM hdfsCluster('cluster_simple', 'hdfs://hdfs1:9000/{some,another}_dir/some_file_{1..3}', 'TSV', 'name String, value UInt32')
  1. Получите количество строк во всех файлах этих двух каталогов:
SELECT count(*)
FROM hdfsCluster('cluster_simple', 'hdfs://hdfs1:9000/{some,another}_dir/*', 'TSV', 'name String, value UInt32')
Примечание

Если в списке файлов встречаются числовые диапазоны с ведущими нулями, используйте фигурные скобки для каждой цифры по отдельности или символ ?.