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

Подключение BigQuery

Аутентификация

JSON ключевой файл

Загрузка JSON ключевого файла учетной записи службы

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

Вы можете предоставить JSON ключевой файл в одном из двух форматов:

  • Загрузка JSON ключевого файла — Загрузите ключевой файл напрямую в его обычном формате JSON.
  • Строка, закодированная в base64 — Предоставьте ключевой файл в виде строки, закодированной в base64. Когда вы предоставляете строку, закодированную в base64, dbt автоматически декодирует ее и заполняет необходимые поля.

Загрузка JSON ключевого файла должна заполнить следующие поля:

  • Project id
  • Private key id
  • Private key
  • Client email
  • Client id
  • Auth uri
  • Token uri
  • Auth provider x509 cert url
  • Client x509 cert url

В дополнение к этим полям, в подключении BigQuery можно настроить два других необязательных поля:

ПолеОписаниеПримеры
TimeoutУстарело; существует для обратной совместимости с более старыми версиями dbt и будет удалено в будущем.300
LocationМестоположение, где dbt должен создавать наборы данных.US, EU
Действительное подключение BigQueryДействительное подключение BigQuery

BigQuery OAuth

Доступно в: Среды разработки, только корпоративные планы

Метод аутентификации OAuth позволяет dbt Cloud выполнять запросы на разработку от имени пользователя BigQuery без настройки ключевого файла учетной записи службы BigQuery в dbt Cloud. Для получения дополнительной информации о начальной настройке подключения BigQuery OAuth в dbt Cloud, пожалуйста, ознакомьтесь с документацией по настройке BigQuery OAuth.

Как конечный пользователь, если ваша организация настроила BigQuery OAuth, вы можете связать проект с вашей личной учетной записью BigQuery в вашем личном профиле в dbt Cloud, следующим образом:

Кнопка связи на экране учетных данных dbt CloudКнопка связи на экране учетных данных dbt Cloud

Конфигурация

Чтобы узнать, как оптимизировать производительность с помощью конфигураций, специфичных для платформы данных в dbt Cloud, обратитесь к конфигурации, специфичной для BigQuery.

Необязательные конфигурации

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

Чтобы настроить ваши необязательные конфигурации в dbt Cloud:

  1. Нажмите на ваше имя в нижнем левом углу бокового меню в dbt Cloud
  2. Выберите Ваш профиль из меню
  3. Оттуда нажмите Проекты и выберите ваш проект BigQuery
  4. Перейдите в Подключение для разработки и выберите BigQuery
  5. Нажмите Редактировать и затем прокрутите вниз до Необязательные настройки
Необязательная конфигурация BigQueryНеобязательная конфигурация BigQuery

Следующие конфигурации являются необязательными, которые вы можете настроить в dbt Cloud:

Конфигурация
Информация
Тип
Пример
PriorityУстанавливает приоритет для заданий BigQuery (либо interactive, либо в очереди для пакетной обработки batch)Строкаbatch или interactive
RetriesУказывает количество повторных попыток для неудачных заданий из-за временных проблемЦелое число3
LocationМестоположение для создания новых наборов данныхСтрокаUS, EU, us-west2
Maximum bytes billedОграничивает максимальное количество байтов, которые могут быть выставлены за запросЦелое число1000000000
Execution projectУказывает идентификатор проекта для выставления счетов за выполнение запросовСтрокаmy-project-id
Impersonate service accountПозволяет пользователям, аутентифицированным локально, получать доступ к ресурсам BigQuery под указанной учетной записью службыСтрокаservice-account@project.iam.gserviceaccount.com
Job retry deadline secondsУстанавливает общее количество секунд, в течение которых BigQuery будет пытаться повторно выполнить задание, если оно не удалосьЦелое число600
Job creation timeout secondsУказывает максимальное время ожидания для шага создания заданияЦелое число120
Google cloud storage-bucketМестоположение для хранения объектов в Google Cloud StorageСтрокаmy-bucket
Dataproc regionУказывает облачный регион для выполнения заданий по обработке данныхСтрокаUS, EU, asia-northeast1
Dataproc cluster nameПрисваивает уникальный идентификатор группе виртуальных машин в DataprocСтрокаmy-cluster
 Priority
 Retries
 Location
 Maximum bytes billed
 Execution project
 Impersonate service account
 Job retry deadline seconds
 Job creation timeout seconds

Запуск моделей dbt на Python в Google Cloud Platform

Для выполнения Python-моделей dbt на GCP, dbt использует вспомогательные сервисы, Dataproc и Cloud Storage, которые предлагают тесную интеграцию с BigQuery. Вы можете использовать существующий кластер Dataproc и корзину Cloud Storage или создать новые:

 Google cloud storage bucket
 Dataproc region
 Dataproc cluster name

Подключения на уровне учетной записи и управление учетными данными

Вы можете повторно использовать подключения в нескольких проектах с помощью глобальных подключений. Подключения привязаны на уровне среды (ранее на уровне проекта), поэтому вы можете использовать несколько подключений внутри одного проекта (для управления разработкой, тестированием, производством и т.д.).

Подключения BigQuery в dbt Cloud в настоящее время ожидают, что учетные данные будут обрабатываться на уровне подключения (и только подключения BigQuery). Это изначально было разработано для облегчения создания нового подключения путем загрузки ключевого файла учетной записи службы. Это описывает, как переопределить учетные данные на уровне среды с помощью расширенных атрибутов, чтобы позволить администраторам проектов управлять учетными данными независимо от деталей подключения на уровне учетной записи, используемых для этой среды.

Для проекта вы сначала создадите переменную среды для хранения секретного значения private_key. Затем вы используете расширенные атрибуты, чтобы переопределить весь JSON учетной записи службы (вы не можете переопределить только секретный ключ из-за ограничения расширенных атрибутов).

  1. Новая переменная среды

    • Создайте новую секретную переменную среды для обработки закрытого ключа: DBT_ENV_SECRET_PROJECTXXX_PRIVATE_KEY
    • Заполните значение закрытого ключа в соответствии с окружением

    Чтобы автоматизировать ваше развертывание, используйте следующий запрос API администратора, с XXXXX вашим номером учетной записи, YYYYY вашим номером проекта, ZZZZZ вашим токеном API:

    curl --request POST \
    --url https://cloud.getdbt.com/api/v3/accounts/XXXXX/projects/YYYYY/environment-variables/bulk/ \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer ZZZZZ' \
    --header 'Content-Type: application/json' \
    --data '{
    "env_var": [
    {
    "new_name": "DBT_ENV_SECRET_PROJECTXXX_PRIVATE_KEY",
    "project": "Value by default for the entire project",
    "ENVIRONMENT_NAME_1": "Optional, if wanted, value for environment name 1",
    "ENVIRONMENT_NAME_2": "Optional, if wanted, value for environment name 2"
    }
    ]
    }'
  2. Расширенные атрибуты

    В деталях среды заполните блок расширенных атрибутов следующим содержимым (заменив XXX на вашу соответствующую информацию):

    keyfile_json:
    type: service_account
    project_id: xxx
    private_key_id: xxx
    private_key: '{{ env_var(''DBT_ENV_SECRET_PROJECTXXX_PRIVATE_KEY'') }}'
    client_email: xxx
    client_id: xxx
    auth_uri: xxx
    token_uri: xxx
    auth_provider_x509_cert_url: xxx
    client_x509_cert_url: xxx

    Если вам нужно переопределить другие поля на уровне среды через расширенные атрибуты, пожалуйста, соблюдайте ожидаемую отступы (порядок не имеет значения):

    priority: interactive
    keyfile_json:
    type: xxx
    project_id: xxx
    private_key_id: xxx
    private_key: '{{ env_var(''DBT_ENV_SECRET_PROJECTXXX_PRIVATE_KEY'') }}'
    client_email: xxx
    client_id: xxx
    auth_uri: xxx
    token_uri: xxx
    auth_provider_x509_cert_url: xxx
    client_x509_cert_url: xxx
    execution_project: buck-stops-here-456

    Чтобы автоматизировать ваше развертывание, вам сначала нужно создать полезную нагрузку расширенных атрибутов для данного проекта, а затем назначить ее конкретной среде. С XXXXX как вашим номером учетной записи, YYYYY как вашим номером проекта, и ZZZZZ как вашим токеном API:

    curl --request POST \
    --url https://cloud.getdbt.com/api/v3/accounts/XXXXX/projects/YYYYY/extended-attributes/ \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer ZZZZZ' \
    --header 'Content-Type: application/json' \
    --data '{
    "id": null,
    "extended_attributes": {"type":"service_account","project_id":"xxx","private_key_id":"xxx","private_key":"{{ env_var('DBT_ENV_SECRET_PROJECTXXX_PRIVATE_KEY') }}","client_email":"xxx","client_id":xxx,"auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_x509_cert_url":"xxx"},
    "state": 1
    }'

    Запомните id, возвращенный в сообщении. Он будет использован в следующем вызове. С EEEEE идентификатором среды, FFFFF идентификатором расширенных атрибутов:

    curl --request POST \
    --url https://cloud.getdbt.com/api/v3/accounts/XXXXX/projects/YYYYY/environments/EEEEE/ \
    --header 'Accept: application/json' \
    --header 'Authorization: Bearer ZZZZZZ' \
    --header 'Content-Type: application/json' \
    --data '{
    "extended_attributes_id": FFFFF
    }'
0