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

Интеграция Amazon S3 с ClickHouse Cloud

S3 ClickPipe обеспечивает полностью управляемый и отказоустойчивый способ ингестии данных из Amazon S3 и S3-совместимых объектных хранилищ в ClickHouse Cloud. Поддерживаются режимы однократной и непрерывной ингестии с гарантиями exactly-once.

S3 ClickPipes можно разворачивать и управлять ими вручную через ClickPipes UI, а также программно с использованием OpenAPI и Terraform.

Поддерживаемые источники данных

NameLogoDetails
Amazon S3Для непрерывной ингестии по умолчанию требуется лексикографический порядок, но её можно настроить на приём файлов в произвольном порядке.
Cloudflare R2
S3-compatible
Непрерывная ингестия требует лексикографического порядка.
DigitalOcean Spaces
S3-compatible
Непрерывная ингестия требует лексикографического порядка.
Совет

Из-за различий в форматах URL и реализациях API у разных провайдеров объектного хранилища не все S3-совместимые сервисы поддерживаются «из коробки». Если вы сталкиваетесь с проблемами при работе с сервисом, который не указан выше, свяжитесь с нашей командой.

Поддерживаемые форматы

Возможности

Однократная ингестия

По умолчанию S3 ClickPipe загружает все файлы, соответствующие заданному шаблону, из указанного бакета в целевую таблицу ClickHouse в рамках одной пакетной операции. После завершения задачи по ингестии ClickPipe автоматически останавливается. Этот режим однократной ингестии обеспечивает семантику exactly-once, гарантируя надёжную обработку каждого файла без дублирования.

Непрерывная ингестия

Когда непрерывная ингестия включена, ClickPipes непрерывно принимает данные из указанного пути. Чтобы определить порядок ингестии, S3 ClickPipe по умолчанию полагается на неявный лексикографический порядок файлов. Также можно настроить приём файлов в произвольном порядке с использованием очереди Amazon SQS, привязанной к бакету.

Лексикографический порядок

По умолчанию S3 ClickPipe предполагает, что файлы добавляются в бакет в лексикографическом порядке и опирается на этот неявный порядок для последовательного приёма файлов. Это означает, что любой новый файл должен быть лексикографически больше последнего принятого файла. Например, файлы с именами file1, file2 и file3 будут приниматься последовательно, но если в бакет будет добавлен новый file 0, он будет проигнорирован, потому что имя файла лексикографически не больше, чем у последнего принятого файла.

В этом режиме S3 ClickPipe выполняет начальную загрузку всех файлов по указанному пути, а затем с настраиваемым интервалом (по умолчанию 30 секунд) периодически проверяет наличие новых файлов. Невозможно запустить ингестию, начиная с конкретного файла или момента времени — ClickPipes всегда загружает все файлы по указанному пути.

Любой порядок

Примечание

Режим без упорядочивания поддерживается только для Amazon S3 и не поддерживается для публичных бакетов. Для него требуется настроить очередь Amazon SQS, подключённую к бакету.

Можно настроить S3 ClickPipe для приёма файлов, не имеющих неявного порядка, настроив очередь Amazon SQS, подключённую к бакету. Это позволяет ClickPipes прослушивать события создания объектов и выполнять ингестию любых новых файлов независимо от схемы именования.

В этом режиме S3 ClickPipe сначала выполняет начальную загрузку всех файлов по указанному пути, а затем прослушивает в очереди события ObjectCreated:*, которые соответствуют этому пути. Любое сообщение о ранее обработанном файле, о файле, не соответствующем пути, или о событии другого типа будет игнорироваться.

Примечание

Указание префикса/постфикса для событий необязательно. Если вы его задаёте, убедитесь, что он совпадает с путём, указанным для ClickPipe. S3 не допускает несколько перекрывающихся правил уведомлений для одних и тех же типов событий.

Файлы ингестируются при достижении порога, заданного в max insert bytes или max file count, либо по истечении настраиваемого интервала (по умолчанию 30 секунд). Невозможно запустить ингестию с конкретного файла или момента времени — ClickPipes всегда будут загружать все файлы по выбранному пути. Если настроен DLQ, неудачно обработанные сообщения будут повторно помещаться в очередь и переобрабатываться до числа раз, указанного в параметре DLQ maxReceiveCount.

Совет

Настоятельно рекомендуем настроить Dead-Letter-Queue (DLQ) для очереди SQS, чтобы упростить отладку и повторную обработку неудачных сообщений.

SNS в SQS

Также можно отправлять уведомления о событиях S3 в SQS через тему SNS. Это полезно, если вы сталкиваетесь с ограничениями прямой интеграции S3 → SQS. В этом случае необходимо включить опцию raw message delivery.

Сопоставление шаблонов файлов

Object Storage ClickPipes используют стандарт POSIX для сопоставления файлов по шаблону. Все шаблоны чувствительны к регистру и применяются к полному пути после имени бакета. Для лучшей производительности используйте максимально конкретный шаблон (например, data-2024-*.csv вместо *.csv).

Поддерживаемые шаблоны

ШаблонОписаниеПримерСовпадения
?Совпадает ровно с одним символом (кроме /)data-?.csvdata-1.csv, data-a.csv, data-x.csv
*Совпадает с нулём или более символами (кроме /)data-*.csvdata-1.csv, data-001.csv, data-report.csv, data-.csv
**
Рекурсивный шаблон
Совпадает с нулём или более символами (включая /). Позволяет рекурсивно обходить каталоги.logs/**/error.loglogs/error.log, logs/2024/error.log, logs/2024/01/error.log

Примеры:

  • https://bucket.s3.amazonaws.com/folder/*.csv
  • https://bucket.s3.amazonaws.com/logs/**/data.json
  • https://bucket.s3.amazonaws.com/file-?.parquet
  • https://bucket.s3.amazonaws.com/data-2024-*.csv.gz

Неподдерживаемые шаблоны

ШаблонОписаниеПримерАльтернативы
{abc,def}Подстановка в фигурных скобках{logs,data}/file.csvСоздайте отдельные ClickPipes для каждого пути.
{N..M}Подстановка числового диапазонаfile-{1..100}.csvИспользуйте file-*.csv или file-?.csv.

Примеры:

  • https://bucket.s3.amazonaws.com/{documents-01,documents-02}.json
  • https://bucket.s3.amazonaws.com/file-{1..100}.csv
  • https://bucket.s3.amazonaws.com/{logs,metrics}/data.parquet

Семантика «ровно один раз»

При приёме больших наборов данных могут происходить различные сбои, которые приводят к частичным вставкам или дублированию данных. ClickPipes для объектного хранилища устойчивы к ошибкам вставки и обеспечивают семантику «ровно один раз». Это достигается с помощью временных промежуточных (staging) таблиц. Сначала данные вставляются в staging-таблицы. Если при этой вставке что-то идёт не так, staging-таблицу можно очистить (TRUNCATE) и повторить вставку из чистого состояния. Только когда вставка завершена и прошла успешно, партиции в staging-таблице переносятся в целевую таблицу. Чтобы узнать больше об этой стратегии, ознакомьтесь с этой записью в блоге.

Виртуальные столбцы

Чтобы отслеживать, какие файлы были приняты при приёме данных, добавьте виртуальный столбец _file в список сопоставления столбцов. Виртуальный столбец _file содержит имя файла исходного объекта, которое можно использовать в запросах, чтобы определить, какие файлы были обработаны.

Контроль доступа

Права доступа

S3 ClickPipe поддерживает как общедоступные, так и приватные бакеты. Бакеты типа Requester Pays не поддерживаются.

Бакет S3

В политике бакета должны быть разрешены следующие действия:

Очередь SQS

При использовании неупорядоченного режима в политике очереди должны быть разрешены следующие действия:

Аутентификация

Учетные данные IAM

Чтобы использовать ключи доступа для аутентификации, при настройке подключения ClickPipe в поле Authentication method выберите Credentials. Затем укажите идентификатор ключа доступа (например, AKIAIOSFODNN7EXAMPLE) и секретный ключ доступа (например, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY) в полях Access key и Secret key соответственно.

Учетные данные IAM для S3 ClickPipes

Роль IAM

Чтобы использовать управление доступом на основе ролей для аутентификации, выберите IAM role в разделе Authentication method при настройке подключения ClickPipe.

Аутентификация IAM для S3 ClickPipes

Воспользуйтесь этим руководством, чтобы создать роль с необходимой политикой доверия для доступа к S3. Затем укажите ARN роли IAM в поле IAM role ARN.

Расширенные настройки

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

ПараметрЗначение по умолчаниюОписание
Max insert bytes10GBКоличество байт, обрабатываемых в одном пакете вставки.
Max file count100Максимальное количество файлов, обрабатываемых в одном пакете вставки.
Max threadsauto(3)Максимальное количество параллельных потоков для обработки файлов.
Max insert threads1Максимальное количество параллельных потоков вставки для обработки файлов.
Min insert block size bytes1GBМинимальный размер блока в байтах, который может быть вставлен в таблицу.
Max download threads4Максимальное количество параллельных потоков загрузки.
Object storage polling interval30sНастраивает максимальный период ожидания перед вставкой данных в кластер ClickHouse.
Parallel distributed insert select2Параметр parallel_distributed_insert_select.
Parallel view processingfalseВключать ли отправку данных в присоединённые представления параллельно вместо последовательной обработки.
Use cluster functiontrueВыполнять ли обработку файлов параллельно на нескольких узлах.
Расширенные настройки для ClickPipes

Масштабирование

Object Storage ClickPipes масштабируются исходя из минимального размера сервиса ClickHouse, определённого настроенными параметрами вертикального автомасштабирования. Размер ClickPipe фиксируется при создании конвейера. Последующие изменения настроек сервиса ClickHouse не повлияют на размер ClickPipe.

Чтобы увеличить пропускную способность при крупных задачах по приёму данных, рекомендуется масштабировать сервис ClickHouse перед созданием ClickPipe.

Известные ограничения

Размер файла

ClickPipes будет пытаться принимать только объекты, размер которых 10 ГБ или меньше. Если файл превышает 10 ГБ, в специализированную таблицу ошибок ClickPipes будет добавлена запись об ошибке.

Совместимость

Несмотря на совместимость с S3, некоторые сервисы используют иную структуру URL-адресов, которую S3 ClickPipe может оказаться не в состоянии корректно разобрать (например, Backblaze B2), или требуют интеграции с зависящими от провайдера сервисами очередей для непрерывного неупорядоченного приёма данных. Если вы сталкиваетесь с проблемами при работе с сервисом, который не указан в разделе Поддерживаемые источники данных, пожалуйста, обратитесь к нашей команде.

Поддержка представлений

Поддерживаются также materialized view для целевой таблицы. ClickPipes создаст промежуточные таблицы не только для целевой таблицы, но и для любых зависящих от неё materialized view.

Мы не создаём промежуточные таблицы для нематериализованных представлений. Это означает, что если у вас есть целевая таблица с одной или несколькими нижестоящими materialized view, этим materialized view не следует выбирать данные из целевой таблицы через обычное представление. В противном случае вы можете столкнуться с отсутствующими данными в соответствующей materialized view.