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

Шаблон Dataflow BigQuery в ClickHouse

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

Требования к конвейеру

  • Исходная таблица BigQuery должна существовать.
  • Целевая таблица ClickHouse должна существовать.
  • Хост ClickHouse должен быть доступен с машин рабочего процесса Dataflow.

Параметры шаблона



Название параметраОписание параметраОбязательноЗаметки
jdbcUrlJDBC URL ClickHouse в формате jdbc:clickhouse://<host>:<port>/<schema>.Не добавляйте имя пользователя и пароль в качестве параметров JDBC. Любой другой параметр JDBC можно добавить в конце URL JDBC. Для пользователей ClickHouse Cloud добавьте ssl=true&sslmode=NONE к jdbcUrl.
clickHouseUsernameИмя пользователя ClickHouse для аутентификации.
clickHousePasswordПароль ClickHouse для аутентификации.
clickHouseTableНазвание целевой таблицы ClickHouse, в которую будут вставляться данные.
maxInsertBlockSizeМаксимальный размер блока для вставки, если мы контролируем создание блоков для вставки (опция ClickHouseIO).Опция ClickHouseIO.
insertDistributedSyncЕсли параметр включен, запрос вставки в распределенной таблице ожидает, пока данные будут отправлены на все узлы в кластере (опция ClickHouseIO).Опция ClickHouseIO.
insertQuorumДля запросов INSERT в реплицированной таблице ожидает записи для указанного числа реплик и линейно добавляет данные. 0 - отключено.Опция ClickHouseIO. Этот параметр отключен в настройках сервера по умолчанию.
insertDeduplicateДля запросов INSERT в реплицированной таблице указывает, что должна быть выполнена дедупликация вставляемых блоков.Опция ClickHouseIO.
maxRetriesМаксимальное количество попыток для каждой вставки.Опция ClickHouseIO.
InputTableSpecТаблица BigQuery для чтения. Укажите либо inputTableSpec, либо query. Когда оба установлены, параметр query имеет приоритет. Пример: <BIGQUERY_PROJECT>:<DATASET_NAME>.<INPUT_TABLE>.Читает данные напрямую из хранилища BigQuery, используя BigQuery Storage Read API. Обратите внимание на ограничения API чтения хранилища.
outputDeadletterTableТаблица BigQuery для сообщений, которые не смогли достичь выходной таблицы. Если таблица не существует, она создается во время выполнения конвейера. Если не указано, используется <outputTableSpec>_error_records. Например, <PROJECT_ID>:<DATASET_NAME>.<DEADLETTER_TABLE>.
querySQL запрос для чтения данных из BigQuery. Если набор данных BigQuery находится в другом проекте, чем задание Dataflow, укажите полное имя набора данных в SQL запросе, например: <PROJECT_ID>.<DATASET_NAME>.<TABLE_NAME>. По умолчанию используется GoogleSQL, если useLegacySql не истинно.Необходимо указать либо inputTableSpec, либо query. Если установить оба параметра, шаблон использует параметр query. Пример: SELECT * FROM sampledb.sample_table.
useLegacySqlУстановите в true, чтобы использовать устаревший SQL. Этот параметр применяется только при использовании параметра query. По умолчанию false.
queryLocationНеобходимо при чтении из авторизованного представления без разрешения на доступ к базовой таблице. Например, US.
queryTempDatasetУкажите существующий набор данных для создания временной таблицы для сохранения результатов запроса. Например, temp_dataset.
KMSEncryptionKeyЕсли чтение из BigQuery осуществляется с использованием источника запроса, используйте этот ключ Cloud KMS для шифрования любых временных таблиц, созданных в процессе. Например, projects/your-project/locations/global/keyRings/your-keyring/cryptoKeys/your-key.
примечание

Все значения по умолчанию для параметров ClickHouseIO можно найти в ClickHouseIO Apache Beam Connector

Схема исходных и целевых таблиц

Для эффективной загрузки набора данных BigQuery в ClickHouse проводятся процесс инфестации колонок с следующими фазами:

  1. Шаблоны создают объект схемы на основе целевой таблицы ClickHouse.
  2. Шаблоны проходят по набору данных BigQuery и пытаются сопоставить колонки на основе их имен.

к сведению

При этом ваш набор данных BigQuery (либо таблица, либо запрос) должен иметь точно такие же имена колонок, как и ваша целевой таблицы ClickHouse.

Привязка типов данных

Типы BigQuery преобразуются на основе определения вашей таблицы ClickHouse. Следовательно, приведенная выше таблица перечисляет рекомендуемую привязку, которую вы должны иметь в вашей целевой таблице ClickHouse (для данной таблицы/запроса BigQuery):

Тип BigQueryТип ClickHouseЗаметки
МассивМассивВнутренний тип должен быть одним из поддерживаемых примитивных типов данных, перечисленных в этой таблице.
Булевый типБулевый тип
ДатаДата
Дата и времяДата и времяРаботает также с Enum8, Enum16 и FixedString.
СтрокаСтрокаВ BigQuery все целые типы (INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) являются псевдонимами для INT64. Рекомендуем установить в ClickHouse правильный размер целого числа, так как шаблон будет преобразовывать колонку на основе определенного типа колонки (Int8, Int16, Int32, Int64).
Целочисленные типыЦелочисленные типыВ BigQuery все целые типы (INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) являются псевдонимами для INT64. Рекомендуем установить в ClickHouse правильный размер целого числа, так как шаблон будет преобразовывать колонку на основе определенного типа колонки (Int8, Int16, Int32, Int64). Шаблон также будет преобразовывать необозначенные целые типы, если они используются в таблице ClickHouse (UInt8, UInt16, UInt32, UInt64).
Типы с плавающей запятойТипы с плавающей запятойПоддерживаемые типы ClickHouse: Float32 и Float64

Запуск шаблона

Шаблон BigQuery в ClickHouse доступен для выполнения через Google Cloud CLI.

примечание

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

Установка и настройка gcloud CLI

  • Если еще не установлено, установите gcloud CLI.
  • Следуйте разделу Перед тем как начать в этом руководстве, чтобы настроить необходимые конфигурации, настройки и разрешения для запуска шаблона DataFlow.

Команда запуска

Используйте команду gcloud dataflow flex-template run для запуска задания Dataflow, использующего гибкий шаблон.

Ниже приведен пример команды:

Разбор команды

  • Имя задания: Текст, следующий за ключевым словом run, является уникальным именем задания.
  • Файл шаблона: JSON-файл, указанный с помощью --template-file-gcs-location, определяет структуру шаблона и детали о принимаемых параметрах. Указанный путь к файлу является публичным и готовым к использованию.
  • Параметры: Параметры разделяются запятыми. Для параметров на основе строк значения оборачиваются в двойные кавычки.

Ожидаемый ответ

После выполнения команды вы должны увидеть ответ, похожий на следующий:

Мониторинг задания

Перейдите на вкладку Jobs в Dataflow в вашей консоли Google Cloud, чтобы контролировать статус задания. Вы найдете детали задания, включая прогресс и любые ошибки:

Устранение неполадок

Код: 241. DB::Exception: Превышен лимит памяти (всего)

Эта ошибка возникает, когда ClickHouse исчерпывает память при обработке больших партий данных. Чтобы устранить эту проблему:

  • Увеличьте ресурсы экземпляра: обновите сервер ClickHouse до более крупного экземпляра с большим объемом памяти, чтобы справиться с нагрузкой обработки данных.
  • Уменьшите размер партии: отрегулируйте размер партии в конфигурации задания Dataflow, чтобы отправлять меньшие объемы данных в ClickHouse, уменьшая потребление памяти на партию. Эти изменения могут помочь сбалансировать использование ресурсов во время приема данных.

Исходный код шаблона

Исходный код шаблона доступен в форке ClickHouse DataflowTemplates