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

Подключение к BigQuery Совместимо с dbt v2

Чтобы узнать, какие функции BigQuery поддерживаются в dbt v2 в режиме strict, см. Поддержка функций BigQuery.

Необходимые разрешения​

Учетным записям пользователей dbt требуются следующие разрешения для чтения данных, а также для создания таблиц и views в проекте BigQuery:

  • Редактор данных BigQuery
  • Пользователь BigQuery
(Версии dbt: v1.12 и новее)

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

  • bigquery.routines.list: получение списка подпрограмм в наборе данных
  • bigquery.routines.get: чтение метаданных подпрограмм

Без этих разрешений dbt может не обнаружить существующие таблицы, а некоторые операции поиска могут завершиться ошибкой. Предопределённые роли, такие как BigQuery Data Editor, обычно уже включают эти разрешения.

Для работы с BigQuery при использовании dbt v2 пользователям также нужна роль:

  • BigQuery Read Session User (для доступа к Storage Read API)

Чтобы использовать функцию «История запросов», добавьте роль:

  • BigQuery Resource Viewer

Для работы с BigQuery DataFrames пользователям нужны следующие дополнительные роли:

  • BigQuery Job User
  • BigQuery Read Session User
  • Notebook Runtime User
  • Code Creator
  • colabEnterpriseUser

Права доступа к хранилищу данных для dbt v2​

Удостоверение Google Cloud (сервисный аккаунт или пользователь), которое использует dbt v2, должно иметь разрешения IAM для запуска заданий, чтения и записи данных таблиц, а также чтения метаданных, которые dbt v2 использует для интроспекции и проверки актуальности источников.

Необходимые объекты Google Cloud​

Перед подключением следующие объекты должны существовать или быть доступны:

ОбъектТермин BigQueryНазначение
ПроектПроект GCPИдентификатор вашего проекта Google Cloud
Набор данныхНабор данныхЦелевой набор данных (эквивалент схемы)
Сервисный аккаунт или пользовательУдостоверение IAMУдостоверение для аутентификации
Местоположение или регионМестоположениеМестоположение данных (например, US, EU, us-east1)

Разрешения IAM​

Для основных функций dbt необходимы следующие разрешения:

РазрешениеНазначение
bigquery.datasets.getДоступ к метаданным набора данных
bigquery.tables.createСоздание таблиц
bigquery.tables.deleteУдаление или замена таблиц
bigquery.tables.getЧтение метаданных таблиц
bigquery.tables.getDataЧтение данных таблиц
bigquery.tables.listПолучение списка таблиц в наборе данных
bigquery.tables.updateОбновление схемы таблицы
bigquery.tables.updateDataВставка, обновление или удаление строк
bigquery.routines.getЧтение метаданных подпрограмм
bigquery.routines.listПолучение списка подпрограмм в наборе данных
bigquery.jobs.createВыполнение запросов

Следующие разрешения необязательны и нужны для дополнительных функций dbt:

РазрешениеКогда требуется
bigquery.datasets.createАвтоматическое создание наборов данных
bigquery.routines.createСоздание UDF или хранимых процедур
bigquery.jobs.getОтслеживание статуса заданий
storage.objects.createМодели Python (промежуточное хранение в GCS)
dataproc.*Модели Python в Dataproc

Предопределённые роли IAM​

Следующие роли обычно служат отправной точкой при настройке доступа для dbt:

РольОписаниеСценарий использования
roles/bigquery.dataEditorЧтение и запись таблиц в наборах данныхСтандартные операции dbt
roles/bigquery.userЗапуск заданий, создание наборов данныхВыполнение заданий
roles/bigquery.jobUserТолько запуск заданийМинимальные права для выполнения запросов

Для доступа к Storage Read API с помощью dbt v2 также предоставьте роль BigQuery Read Session User (roles/bigquery.readSessionUser) на уровне проекта, как указано в разделе Подключение BigQuery.

Операции с метаданными​

Для основных функций dbt необходимы следующие операции:

Тип запросаИспользуемый SQL или APIНеобходимое разрешение
Получение схемы таблицыAPI get_table_schemabigquery.tables.get
Получение списка отношенийЗапрос к набору данныхbigquery.tables.list, bigquery.routines.list
Проверка актуальности источниковЗапрос к метаданным __TABLES__bigquery.tables.get
Получение статистики таблицыЗапрос к INFORMATION_SCHEMAbigquery.tables.get
Создание набора данныхCREATE SCHEMAbigquery.datasets.create

INFORMATION_SCHEMA и представления метаданных​

dbt v2 выполняет запросы к следующим системным представлениям BigQuery:

ПредставлениеНазначениеОбласть действия
INFORMATION_SCHEMA.TABLESПолучение списка таблицНабор данных или регион
INFORMATION_SCHEMA.COLUMNSМетаданные столбцовНабор данных или регион
INFORMATION_SCHEMA.VIEWSОпределения представленийНабор данных или регион
INFORMATION_SCHEMA.PARTITIONSИнформация о секцияхТолько набор данных
__TABLES__ (устарело)Время изменения таблицНабор данных

BigQuery DataFrames (необязательно)​

Для рабочих процессов BigQuery DataFrames пользователям обычно требуются дополнительные роли, такие как BigQuery Job User, BigQuery Read Session User, Notebook Runtime User, Code Creator и colabEnterpriseUser. Точные названия ролей в вашей организации уточните у администратора Google Cloud.

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

dbt поддерживает различные методы аутентификации в зависимости от вашей среды и тарифного плана:

  • Окружения для разработки поддерживают:
  • Окружения для деплоя поддерживают:
    • Service JSON
    • BigQuery Workload Identity Federation (WIF) Enterprise

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

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

  • BigQuery: Поддерживает все типы подключений (используйте этот вариант)
  • BigQuery (Legacy):  Поддерживает все типы подключений, кроме WIF (устаревшая функция. Не используйте.)

Для всех новых подключений следует выбирать BigQuery, поскольку вариант BigQuery (Legacy) будет выведен из эксплуатации. Чтобы обновить существующие подключения и учетные данные в окружении для использования нового варианта BigQuery, сначала удалите конфигурации с помощью API.

JSON keyfile​

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

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

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

  • JSON keyfile upload — Загрузите keyfile напрямую в его стандартном формате JSON.
  • Base64-encoded string — Укажите keyfile в виде строки, закодированной в base64. При предоставлении строки в формате base64 dbt автоматически декодирует её и заполняет необходимые поля.

Опция JSON keyfile доступна для настройки как development, так и deployment окружений.

Загрузка корректного JSON keyfile заполнит следующие поля:

  • 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​

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

Метод аутентификации OAuth позволяет dbt выполнять запросы от имени пользователя BigQuery или рабочей нагрузки без хранения файла ключа сервисного аккаунта BigQuery в dbt. Однако для завершения настройки в dbt Cloud по-прежнему необходимо предоставить JSON или заполнить поля вручную. Чтобы обойти это требование, необязательно указывать реальные значения (например, можно указать N/A). Подробнее о первоначальной настройке подключения к BigQuery через OAuth в dbt> см. в документации по настройке BigQuery OAuth.

Если ваша организация настроила BigQuery OAuth, вы как конечный пользователь можете связать проект со своим личным аккаунтом BigQuery в своём профиле в dbt.

Федерация удостоверений рабочей нагрузки BigQuery EnterpriseПредварительная версия​

примечание

Если вы используете BigQuery WIF, рекомендуем использовать его вместе с BigQuery OAuth. В противном случае необходимо создать два подключения — одно с service JSON и одно с WIF, чтобы использовать service JSON в средах разработки.

Доступно в: средах развертывания

Метод аутентификации BigQuery WIF позволяет dbt выполнять запросы при развертывании от имени сервисного аккаунта без настройки файла ключа сервисного аккаунта BigQuery в dbt. Дополнительную информацию о первоначальной настройке подключения BigQuery WIF в dbt см. в разделе Настройка Workload Identity Federation для BigQuery.

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

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

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

Чтобы настроить дополнительные параметры в :

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

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

Ниже перечислены необязательные параметры конфигурации, которые вы можете задать в :

Ниже перечислены необязательные параметры конфигурации, которые можно задать в dbt:

Параметр конфигурации
Информация
Тип
Пример
PriorityЗадаёт приоритет заданий BigQuery (либо interactive, либо постановка в очередь для обработки в режиме batch)Stringbatch or interactive
RetriesОпределяет количество повторных попыток для заданий, завершившихся неудачно из‑за временных проблемInteger3
LocationРегион для создания новых наборов данныхStringUS, EU, us-west2
Maximum bytes billedОграничивает максимальное количество байт, за которые может быть выставлен счёт при выполнении запросаInteger1000000000
Execution projectУказывает идентификатор проекта, на который будет выставляться счёт за выполнение запросаStringmy-project-id
Impersonate service accountПозволяет пользователям, аутентифицированным локально, получать доступ к ресурсам BigQuery от имени указанного сервисного аккаунтаStringservice-account@project.iam.gserviceaccount.com
Job retry deadline secondsЗадаёт общее количество секунд, в течение которых BigQuery будет пытаться повторно выполнить задание при сбоеInteger600
Job creation timeout secondsОпределяет максимальный таймаут для этапа создания заданияInteger120
Google cloud storage-bucketРасположение для хранения объектов в Google Cloud StorageStringmy-bucket
Dataproc regionУказывает облачный регион для запуска заданий обработки данныхStringUS, EU, asia-northeast1
Dataproc cluster nameНазначает уникальный идентификатор группе виртуальных машин в DataprocStringmy-cluster
Notebook Template IDУникальный идентификатор среды выполнения ноутбука Colab EnterpriseInteger7018811640745295872
Compute RegionУказывает регион вычислительных ресурсовStringUS, EU, asia-northeast1
 Priority

priority для заданий BigQuery, которые выполняет dbt, можно настроить с помощью конфигурации priority в вашем профиле BigQuery. Поле приоритета может быть установлено в batch или interactive. Для получения дополнительной информации о приоритете запросов обратитесь к документации BigQuery.

 Retries

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

 Location

location наборов данных BigQuery можно установить с помощью настройки location в профиле BigQuery. Согласно документации BigQuery, location может быть либо многорегиональным местоположением (например, EU, US), либо региональным местоположением (например, us-west2).

 Maximum bytes billed

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

Если значение maximum_bytes_billed равно 1000000000, укажите его в поле maximum_bytes_billed в dbt.

Если ваш maximum_bytes_billed равен 1000000000, вы должны ввести это значение в поле maximum_bytes_billed в dbt cloud.

 Execution project

По умолчанию dbt будет использовать указанный project/database как:

  1. Место для материализации ресурсов (моделей, семян, снимков и т.д.), если они не указывают пользовательскую конфигурацию проекта/базы данных
  2. Проект GCP, который получает счет за стоимость запросов или использование слотов

При необходимости вы можете указать проект выполнения для выставления счетов за выполнение запросов, вместо проекта/базы данных, где вы материализуете большинство ресурсов.

 Impersonate service account

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

Для общего обзора этого процесса см. официальную документацию по Созданию краткосрочных учетных данных учетной записи службы.

 Job retry deadline seconds

Job retry deadline seconds задаёт общий лимит времени для повторных попыток BigQuery. По истечении лимита BigQuery прекращает повторять задание.

 Job creation timeout seconds

Job creation timeout seconds задаёт максимальное время ожидания начала задания BigQuery. Если оно не начнётся вовремя, BigQuery прервёт его.

Начиная с dbt v1.10, адаптер BigQuery отправляет запрос на отмену заданий BigQuery, время выполнения которых превышает настроенный тайм-аут. Если запрос выполнен успешно, dbt останавливает задание. Если запрос не выполнен, задание BigQuery может продолжать выполняться в фоновом режиме, пока не завершится или пока вы не отмените его вручную.

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

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

 Google cloud storage bucket

Все, что вы храните в Cloud Storage, должно быть размещено внутри bucket. Buckets помогают вам организовать ваши данные и управлять доступом к ним.

 Dataproc region

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

Для получения дополнительной информации о регионах Dataproc обратитесь к документации BigQuery.

 Dataproc cluster name

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

Ознакомьтесь с документом Dataproc о создании кластера для обзора работы кластеров.

 Notebook Template ID

Уникальный идентификатор, связанный с конкретным ноутбуком Colab, который выступает в роли Python-рантайма для BigQuery DataFrames.

 Compute Region

Этот регион должен совпадать с местоположением вашего датасета BigQuery, если вы хотите использовать BigQuery DataFrames. Также убедитесь, что среда выполнения Colab находится в том же регионе.

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

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

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

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

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

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

Чтобы автоматизировать развертывание, используйте следующий запрос к 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"
}
]
}'
  1. Расширенные атрибуты

Заполните блок расширенных атрибутов следующим содержимым (заменив 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
Loading