ABS ClickPipe предоставляет полностью управляемый и отказоустойчивый способ организовать приём данных из Azure Blob Storage в ClickHouse Cloud. Он поддерживает как одноразовую загрузку, так и непрерывную ингестию с семантикой «ровно один раз».
ABS ClickPipes можно развёртывать и администрировать вручную через интерфейс ClickPipes, а также программно с помощью OpenAPI и Terraform.
ABS ClickPipe загрузит все файлы, соответствующие шаблону, из указанного контейнера в целевую таблицу ClickHouse в рамках одной батч-операции. После завершения задачи ингестии ClickPipe автоматически остановится. Этот режим одноразовой ингестии обеспечивает семантику «ровно один раз», гарантируя надёжную обработку каждого файла без дубликатов.
Когда непрерывная ингестия включена, ClickPipes непрерывно выполняет ингестию данных по указанному пути. Чтобы определить порядок ингестии, ABS ClickPipe использует неявный лексикографический порядок файлов.
Лексикографический порядок
ABS ClickPipe предполагает, что файлы добавляются в контейнер в лексикографическом порядке, и использует этот неявный порядок для последовательного приёма файлов. Это означает, что любой новый файл должен быть лексикографически больше последнего принятого файла. Например, файлы с именами file1, file2 и file3 будут приниматься последовательно, но если в контейнер будет добавлен новый file 0, он будет проигнорирован, потому что имя этого файла лексикографически не больше имени последнего принятого файла.
В этом режиме ABS ClickPipe выполняет начальную загрузку всех файлов по указанному пути, а затем с настраиваемым интервалом проверяет наличие новых файлов (по умолчанию — каждые 30 секунд). Невозможно начать ингестию с конкретного файла или определённого момента времени — ClickPipes всегда загружает все файлы по указанному пути.
Сопоставление файлов с шаблоном
ClickPipes для объектного хранилища используют стандарт POSIX для сопоставления файлов с шаблоном. Все шаблоны чувствительны к регистру, а сопоставление выполняется по полному пути после имени контейнера. Для повышения производительности используйте максимально конкретный шаблон (например, data-2024-*.csv вместо *.csv).
Примеры:
https://storageaccount.blob.core.windows.net/container/folder/*.csv
https://storageaccount.blob.core.windows.net/container/logs/**/data.json
https://storageaccount.blob.core.windows.net/container/file-?.parquet
https://storageaccount.blob.core.windows.net/container/data-2024-*.csv.gz
Примеры:
https://storageaccount.blob.core.windows.net/container/{documents-01,documents-02}.json
https://storageaccount.blob.core.windows.net/container/file-{1..100}.csv
https://storageaccount.blob.core.windows.net/container/{logs,metrics}/data.parquet
Семантика «ровно один раз»
При приёме крупных наборов данных могут возникать различные сбои, что может приводить к частичной вставке или дублированию данных. ClickPipes для объектного хранилища устойчивы к сбоям при вставке и обеспечивают семантику «ровно один раз». Это достигается за счёт использования временных staging-таблиц. Сначала данные вставляются в staging-таблицы. Если во время этой вставки что-то идёт не так, staging-таблицу можно очистить с помощью TRUNCATE, а затем повторить вставку из чистого состояния. Только после полного и успешного завершения вставки партиции из staging-таблицы перемещаются в целевую таблицу. Подробнее об этой стратегии читайте в этой статье блога.
Чтобы отслеживать, какие файлы были приняты, включите виртуальный столбец _file в список сопоставления столбцов. Виртуальный столбец _file содержит имя файла исходного объекта, которое можно использовать в запросе, чтобы определить, какие файлы были обработаны.
ABS ClickPipe поддерживает только закрытые контейнеры. Публичные контейнеры не поддерживаются.
Для контейнеров в политике бакета должны быть разрешены действия s3:GetObject и s3:ListBucket.
Аутентификация через Microsoft Entra ID (включая Managed Identities) в настоящее время не поддерживается.
Для аутентификации в Azure Blob Storage используется строка подключения, которая поддерживает как ключи доступа, так и подписи общего доступа (SAS).
Чтобы пройти аутентификацию с помощью ключа доступа к учетной записи, укажите строку подключения в следующем формате:
Имя вашей учетной записи хранения и ключ доступа к ней можно найти в Azure Portal в разделе Storage Account > Access keys.
Shared Access Signature (SAS)
Чтобы пройти аутентификацию с помощью Shared Access Signature (SAS), укажите строку подключения, содержащую токен SAS:
Сгенерируйте SAS-токен в Azure Portal в разделе Storage Account > Shared access signature с соответствующими разрешениями (Read, List) для контейнера и BLOB-объектов, данные из которых вы хотите принимать.
ABS ClickPipes используют два отдельных сетевых маршрута: один для обнаружения метаданных через сервис ClickPipes, а другой — для приёма данных через сервис ClickHouse Cloud. Если вы хотите настроить дополнительный уровень сетевой безопасности (например, для соответствия нормативным требованиям), сетевой доступ необходимо настроить для обоих маршрутов.
Управление доступом на основе IP не работает, если ваш контейнер Azure Blob Storage находится в том же регионе Azure, что и ваш сервис ClickHouse Cloud. Если оба сервиса расположены в одном регионе, трафик маршрутизируется через внутреннюю сеть Azure, а не через публичный интернет.
-
Для управления доступом на основе IP правила IP-сетей в брандмауэре Azure Storage должны разрешать статические IP-адреса региона сервиса ClickPipes, перечисленные здесь, а также статические IP-адреса для сервиса ClickHouse Cloud. Чтобы получить статические IP-адреса для вашего региона ClickHouse Cloud, откройте терминал и выполните:
ClickPipes предлагает разумные настройки по умолчанию, которые подходят для большинства сценариев. Если в вашем случае требуется более тонкая настройка, вы можете изменить следующие параметры:
ClickPipes для объектного хранилища масштабируются в зависимости от минимального размера сервиса ClickHouse, определяемого настроенными параметрами вертикального автомасштабирования. Размер ClickPipe определяется при создании пайпа. Последующие изменения настроек сервиса ClickHouse не повлияют на размер ClickPipe.
Чтобы увеличить пропускную способность при задачах приёма больших объёмов данных, мы рекомендуем масштабировать сервис ClickHouse до создания ClickPipe.
ClickPipes будет выполнять приём только объектов размером 10 ГБ или меньше. Если размер файла превышает 10 ГБ, в выделенную таблицу ошибок ClickPipes будет добавлена запись об ошибке.
Для контейнеров, содержащих более 100 000 файлов, операции LIST в Azure Blob Storage добавляют дополнительную задержку при обнаружении новых файлов сверх стандартного интервала опроса:
- < 100 тыс. файлов: ~30 секунд (стандартный интервал опроса)
- 100 тыс. файлов: ~40–45 секунд
- 250 тыс. файлов: ~55–70 секунд
- 500 тыс.+ файлов: может превышать 90 секунд
Для непрерывной ингестии ClickPipes должен сканировать контейнер, чтобы находить новые файлы, лексикографически следующие за последним обработанным файлом. Мы рекомендуем распределять файлы по меньшим контейнерам или использовать иерархическую структуру каталогов, чтобы уменьшить число файлов в одной операции перечисления.
Для целевой таблицы также поддерживаются materialized views. ClickPipes создает staging-таблицы не только для целевой таблицы, но и для всех зависимых materialized views.
Мы не создаем staging-таблицы для нематериализованных представлений. Это означает, что если у вас есть целевая таблица и одна или несколько зависящих от нее materialized views, этим materialized views не следует выбирать данные через представление на основе целевой таблицы. В противном случае в materialized view могут отсутствовать данные.
Любые изменения в целевой таблице, её materialized view (включая каскадные materialized view) или в целевых таблицах этих materialized view во время работы ClickPipe приведут к ошибкам, допускающим повторную попытку. Чтобы изменить схему этих зависимостей, следует приостановить ClickPipe, применить изменения, а затем возобновить его работу. Последнее изменение 25 июня 2026 г.