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

Шаблон 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, используя 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 не истинно.Вы должны указать либо 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 (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.

примечание

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Увеличьте ресурсы экземпляра: Upgrade your ClickHouse server to a larger instance with more memory to handle the data processing load.
  • Уменьшите размер партии: Настройте размер партии в конфигурации задания Dataflow, чтобы отправлять меньшие объемы данных в ClickHouse, уменьшая потребление памяти на партию. Эти изменения могут помочь сбалансировать использование ресурсов во время приема данных.

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

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