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

Шаблон Dataflow BigQuery в ClickHouse

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

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

  • Исходная таблица 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 с использованием API чтения данных BigQuery. Обратите внимание на ограничения 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 не равно true.Вы должны указать либо 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Примечания
Тип массиваТип массиваВнутренний тип должен быть одним из поддерживаемых примитивных типов данных, перечисленных в этой таблице.
Логический типТип boolean
Тип датыТип даты
Тип даты и времениТип даты и времениТакже работает с Enum8, Enum16 и FixedString.
Строковый типСтроковый типВ BigQuery все типы Int (INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) являются псевдонимами для INT64. Рекомендуется установить в ClickHouse правильный размер целого числа, так как шаблон будет конвертировать колонку на основе определенного типа колонки (Int8, Int16, Int32, Int64).
Числовые - Целочисленные типыЦелочисленные типыВ BigQuery все типы Int (INT, SMALLINT, INTEGER, BIGINT, TINYINT, BYTEINT) являются псевдонимами для INT64. Рекомендуется установить в ClickHouse правильный размер целого числа, так как шаблон будет конвертировать колонку на основе определенного типа колонки (Int8, Int16, Int32, Int64). Шаблон также будет конвертировать неуказанные типы Int, если они используются в таблице ClickHouse (UInt8, UInt16, UInt32, UInt64).
Числовые - Типы с плавающей точкойТипы с плавающей точкойПоддерживаемые типы ClickHouse: Float32 и Float64

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

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

примечание

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

Войдите в свою Google Cloud Console и найдите DataFlow.

  1. Нажмите кнопку CREATE JOB FROM TEMPLATE
    DataFlow console
  2. Когда форма шаблона откроется, введите имя задания и выберите желаемый регион.
    DataFlow template initial form
  3. Введите в поле DataFlow Template ClickHouse или BigQuery и выберите шаблон BigQuery to ClickHouse
    Select BigQuery to ClickHouse template
  4. После выбора форма развернется, чтобы вы могли предоставить дополнительные детали:
    • JDBC URL сервера ClickHouse в формате jdbc:clickhouse://host:port/schema.
    • Имя пользователя ClickHouse.
    • Имя целевой таблицы ClickHouse.

примечание

Опция пароля ClickHouse помечена как необязательная для случаев, когда пароль не настроен. Чтобы добавить его, прокрутите вниз до опции Password for ClickHouse Endpoint.

BigQuery to ClickHouse extended template form
  1. Настройте и добавьте любые конфигурации, связанные с BigQuery/ClickHouseIO, как указано в разделе Параметры шаблона

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

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

DataFlow console showing a running BigQuery to ClickHouse job

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

Превышен лимит памяти (итого) (код 241)

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

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

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

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