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

s3Cluster Табличная Функция

Это расширение для табличной функции s3.

Позволяет обрабатывать файлы из Amazon S3 и Google Cloud Storage Google Cloud Storage параллельно с множеством узлов в указанном кластере. На инициаторе создается соединение со всеми узлами кластера, раскрываются знаки звездочки в пути к файлу S3 и динамически распределяются каждый файл. На рабочем узле он запрашивает у инициатора следующую задачу для обработки и выполняет её. Это повторяется, пока все задачи не будут завершены.

Синтаксис

s3Cluster(cluster_name, url[, NOSIGN | access_key_id, secret_access_key,[session_token]][, format][, structure][, compression_method][, headers][, extra_credentials])
s3Cluster(cluster_name, named_collection[, option=value [,..]])

Аргументы

АргументОписание
cluster_nameНазвание кластера, который используется для формирования набора адресов и параметров соединения с удаленными и локальными серверами.
urlПуть к файлу или множеству файлов. Поддерживает следующие шаблоны в режиме только для чтения: *, **, ?, {'abc','def'} и {N..M}, где N, M — числа, abc, def — строки. Для получения дополнительной информации смотрите Шаблоны в Путях.
NOSIGNЕсли это ключевое слово указано вместо учетных данных, все запросы не будут подписаны.
access_key_id и secret_access_keyКлючи, которые указывают учетные данные для использования с заданной конечной точкой. Обязательный параметр.
session_tokenТокен сессии для использования с заданными ключами. Опционально при передаче ключей.
formatформат файла.
structureСтруктура таблицы. Формат 'column1_name column1_type, column2_name column2_type, ...'.
compression_methodПараметр опциональный. Поддерживаемые значения: none, gzip или gz, brotli или br, xz или LZMA, zstd или zst. По умолчанию, метод сжатия будет определен автоматически по расширению файла.
headersПараметр опциональный. Позволяет передать заголовки в запрос S3. Передавайте в формате headers(key=value) например headers('x-amz-request-payer' = 'requester'). Смотрите здесь пример использования.
extra_credentialsОпционально. roleARN можно передать через этот параметр. Смотрите здесь пример.

Аргументы также могут быть переданы с использованием именованных коллекций. В этом случае параметры url, access_key_id, secret_access_key, format, structure, compression_method работают аналогично, и поддерживаются дополнительные параметры:

АргументОписание
filenameдобавляется к url, если указан.
use_environment_credentialsвключено по умолчанию, позволяет передавать дополнительные параметры с использованием переменных окружения AWS_CONTAINER_CREDENTIALS_RELATIVE_URI, AWS_CONTAINER_CREDENTIALS_FULL_URI, AWS_CONTAINER_AUTHORIZATION_TOKEN, AWS_EC2_METADATA_DISABLED.
no_sign_requestотключено по умолчанию.
expiration_window_secondsзначение по умолчанию 120.

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

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

Примеры

Выбор данных из всех файлов в папках /root/data/clickhouse и /root/data/database/, используя все узлы в кластере cluster_simple:

SELECT * FROM s3Cluster(
    'cluster_simple',
    'http://minio1:9001/root/data/{clickhouse,database}/*',
    'minio',
    'ClickHouse_Minio_P@ssw0rd',
    'CSV',
    'name String, value UInt32, polygon Array(Array(Tuple(Float64, Float64)))'
) ORDER BY (name, value, polygon);

Подсчет общего количества строк во всех файлах в кластере cluster_simple:

подсказка

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

Для производственных случаев рекомендуется использовать именованные коллекции. Вот пример:


CREATE NAMED COLLECTION creds AS
        access_key_id = 'minio',
        secret_access_key = 'ClickHouse_Minio_P@ssw0rd';
SELECT count(*) FROM s3Cluster(
    'cluster_simple', creds, url='https://s3-object-url.csv',
    format='CSV', structure='name String, value UInt32, polygon Array(Array(Tuple(Float64, Float64)))'
)

Доступ к приватным и публичным корзинам

Пользователи могут использовать те же подходы, что и в документе для функции s3 здесь.

Оптимизация производительности

Для получения подробной информации о том, как оптимизировать производительность функции s3, смотрите наш детальный гид.