Настройка неупорядоченного режима для непрерывной ингестии
По умолчанию GCS ClickPipe исходит из того, что файлы добавляются в бакет в лексикографическом порядке. Можно настроить GCS ClickPipe для приёма файлов, у которых нет естественного порядка, создав подписку Google Cloud Pub/Sub, подключённую к бакету. Это позволяет ClickPipes отслеживать уведомления OBJECT_FINALIZE и выполнять приём любых новых файлов независимо от схемы именования файлов.
Неупорядоченный режим не поддерживается для публичных бакетов. Для него требуется аутентификация через сервисный аккаунт и подписка Google Cloud Pub/Sub, подключённая к бакету.
Как это работает
В этом режиме GCS ClickPipe выполняет первоначальную загрузку всех файлов по выбранному пути, а затем отслеживает уведомления об объектах через подписку Pub/Sub, соответствующие указанному пути. Любое сообщение о ранее обнаруженном файле, файле, не соответствующем пути, или событии другого типа будет игнорироваться. Невозможно начать ингестию с определённого файла или момента времени — ClickPipes всегда загружает все файлы по выбранному пути.
При приёме данных могут возникать различные сбои, которые могут приводить к частичным вставкам или дублированию данных. ClickPipes для объектного хранилища устойчивы к сбоям вставки и обеспечивают семантику exactly-once за счёт использования временных промежуточных таблиц. Сначала данные вставляются в промежуточную таблицу; если что-то идёт не так, промежуточная таблица очищается, а вставка повторяется с чистого состояния. Только после успешного завершения вставки партиции перемещаются в целевую таблицу.
Создайте тему Google Cloud Pub/Sub
1. В Google Cloud Console перейдите в Pub/Sub > Topics > Create topic. Создайте новую тему с подпиской по умолчанию и запишите Topic Name.
2. Настройте уведомление бакета GCS, которое публикует события OBJECT_FINALIZE в тему Pub/Sub, созданную выше.
2.1. Этот шаг нельзя выполнить в Google Cloud Console, поэтому необходимо использовать клиент gcloud или предпочитаемый программный интерфейс Google Cloud. Например, с помощью gcloud:
Настройте сервисный аккаунт
1. Настройте сервисный аккаунт с необходимыми правами доступа, чтобы разрешить ClickPipes перечислять и получать объекты в указанном бакете, а также получать и отслеживать уведомления из подписки Pub/Sub.
1.1. Этот шаг можно выполнить в Google Cloud Console, с помощью клиента gcloud или предпочитаемого программного интерфейса Google Cloud. Например, с помощью gcloud:
Создайте ClickPipe в неупорядоченном режиме
1. В консоли ClickHouse Cloud перейдите в Data Sources > Create ClickPipe и выберите Google Cloud Storage. Введите данные для подключения к вашему бакету GCS. В разделе Authentication method выберите Service Account и укажите ключ сервисного аккаунта в формате .json.
2. Включите непрерывную ингестию, затем выберите Any order в качестве режима ингестии и укажите имя Pub/Sub subscription для подписки, подключённой к вашему бакету. Имя подписки должно соответствовать следующему формату:
3. Нажмите Incoming data. Задайте ключ сортировки для целевой таблицы. При необходимости внесите изменения в сопоставленную схему, затем настройте роль для пользователя базы данных ClickPipes.
4. Проверьте настройку и нажмите Create ClickPipe. ClickPipes выполнит первоначальное сканирование вашего бакета, чтобы загрузить все существующие файлы, соответствующие указанному пути, а затем начнёт обрабатывать файлы по мере поступления в тему новых событий OBJECT_FINALIZE.