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

Шаблон Dataflow BigQuery в ClickHouse

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

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

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

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



Название параметраОписание параметраОбязательноПримечания
jdbcUrlJDBC URL ClickHouse в формате jdbc:clickhouse://<host>:<port>/<schema>.Не добавляйте имя пользователя и пароль в качестве параметров JDBC. Другие параметры JDBC можно добавить в конце JDBC URL. Для пользователей 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. Обратите внимание на ограничения Storage Read 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Примечания
Тип массиваТип массиваВнутренний тип должен быть одним из поддерживаемых примитивных типов данных, перечисленных в этой таблице.
Логический типТип Bool
Тип датыТип даты
Тип даты и времениТип даты и времениРаботает также с 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). Шаблон также преобразует не назначенные типы Int, если они используются в таблице 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 для мониторинга статуса задания. Вы найдете детали задания, включая его прогресс и любые ошибки:

Работа DataFlow

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

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

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

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

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

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