Использование BigQuery DataFrames с dbt Python-моделями
Введение
В этом руководстве вы узнаете, как настроить dbt для работы с BigQuery DataFrames (BigFrames):
- Построение масштабируемых пайплайнов трансформации данных с использованием dbt и Google Cloud, на SQL и Python.
- Использование BigFrames из dbt для масштабируемых SQL-запросов BigQuery.
В дополнение к уже существующим методам выполнения Python‑моделей на базе dataproc/pyspark, теперь вы можете использовать метод отправки BigFrames для выполнения Python‑моделей с pandas‑подобными и scikit‑подобными API — без необходимости настраивать Spark или разбираться в нём.
BigQuery DataFrames — это open source Python‑пакет, который транслирует код pandas и scikit‑learn в масштабируемый SQL для BigQuery. Адаптер dbt-bigquery использует сервис BigQuery Studio Notebook Executor Service для выполнения клиентского Python‑кода.
Предварительные требования
- Аккаунт Google Cloud
- Аккаунт dbt
- Базовые или средние знания SQL и Python.
- Базовое понимание принципов работы dbt. Рекомендуем курс dbt Fundamentals.
Во время настройки вам потребуется выбрать адаптер BigQuery (Legacy) и указать значения для Google Cloud Storage Bucket и Dataproc Region в dbt platform. Подробности см. в разделе Configure BigQuery in dbt platform.
Что вы создадите
В этом руководстве вы создадите решение из двух частей:
- Настройка проекта Google Cloud
- Одноразовая настройка проекта Google Cloud, с которым вы будете работать.
- Создание и запуск Python‑модели
- Создание, конфигурация и выполнение Python‑модели с использованием BigQuery DataFrames и dbt.
Вы настроите окружения, построите масштабируемые пайплайны в dbt и выполните Python‑модель.
Рисунок 1 — Реализация метода отправки BigFrames для Python‑моделей dbt
Настройте Google Cloud
Метод отправки BigFrames в dbt поддерживает как service account, так и OAuth‑аутентификацию. В следующих шагах будет использоваться service account.
-
Создайте новый проект Google Cloud
a. В новом проекте по умолчанию будет включён список API, включая BigQuery, который является обязательным.
b. Включите BigQuery API, который автоматически активирует дополнительные API:
c. Обязательные API:
- BigQuery API: для всех основных операций BigQuery.
- Vertex AI API: для использования сервиса выполнения Colab Enterprise.
- Cloud Storage API: для хранения кода и логов.
- IAM API: для управления правами доступа.
- Compute Engine API: базовая зависимость для среды выполнения ноутбуков.
- Dataform API: для управления кодовыми артефактами ноутбуков внутри BigQuery.
-
Создайте service account и выдайте IAM‑права
Этот service account будет использоваться dbt для чтения и записи данных в BigQuery, а также для работы с BigQuery Studio Notebooks.
Создайте service account и назначьте IAM‑права:
#Создать Service Account
gcloud iam service-accounts create dbt-bigframes-sa
#Выдать роль BigQuery User
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member=serviceAccount:dbt-bigframes-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role=roles/bigquery.user
#Выдать роль BigQuery Data Editor. Её можно ограничить на уровне датасета
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member=serviceAccount:dbt-bigframes-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role=roles/bigquery.dataEditor
#Выдать роль Service Account User
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member=serviceAccount:dbt-bigframes-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role=roles/iam.serviceAccountUser
#Выдать роль Colab Enterprise User
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} --member=serviceAccount:dbt-bigframes-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role=roles/aiplatform.colabEnterpriseUserПри использовании Shared VPCПри использовании Colab Enterprise в среде Shared VPC требуются дополнительные роли для следующих service account в хост‑проекте Shared VPC:
- Vertex AI P4SA (
service-<PROJECT_NUMBER>@gcp-sa-aiplatform.iam.gserviceaccount.com): этому service account всегда требуется роль Compute Network User (roles/compute.networkUser) в хост‑проекте Shared VPC. Замените<PROJECT_NUMBER>на номер проекта. - Colab Enterprise P6SA (
service-<PROJECT_NUMBER>@gcp-sa-vertex-nb.iam.gserviceaccount.com): этому service account также требуется роль Compute Network User (roles/compute.networkUser) в хост‑проекте Shared VPC. Замените<PROJECT_NUMBER>на номер проекта.
- Vertex AI P4SA (
-
(Необязательно) Создайте тестовый датасет BigQuery
Если у вас ещё нет датасета BigQuery, создайте новый:
#Create BQ dataset
bq mk --location=${REGION} echo "${GOOGLE_CLOUD_PROJECT}" | tr '-' '_'_dataset -
Создайте бакет GCS для staging Python‑кода и хранения логов
Для временного хранения кода и логов создайте GCS‑bucket и назначьте необходимые права доступа:
#Создать бакет GCS
gcloud storage buckets create gs://${GOOGLE_CLOUD_PROJECT}-bucket --location=${REGION}
#Выдать Storage Admin на бакет вашему SA
gcloud storage buckets add-iam-policy-binding gs://${GOOGLE_CLOUD_PROJECT}-bucket --member=serviceAccount:dbt-bigframes-sa@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com --role=roles/storage.admin
Настройте BigQuery в dbt platform
Чтобы настроить подключение BigQuery DataFrames в dbt platform, выполните следующие шаги:
- Перейдите в Account settings > Connections и нажмите New connection.
- В разделе Type выберите BigQuery.
- Выберите адаптер BigQuery (Legacy).
- В разделе Optional settings укажите значения для следующих полей:
- Google Cloud Storage Bucket (например:
dbt_name_bucket) - Dataproc Region (например:
us-central1)
- Google Cloud Storage Bucket (например:
- Нажмите Save.
Это необходимо для корректного выполнения заданий BigFrames.
Дополнительную информацию см. в разделе Connect to BigQuery.
Создайте, настройте и выполните ваши Python‑модели
-
В вашем dbt‑проекте создайте SQL‑модель в каталоге
modelsс расширением.sql. Назовите файлmy_sql_model.sql. -
Скопируйте в файл следующий SQL‑код:
select
1 as foo,
2 as bar -
Создайте новый файл модели в каталоге
modelsс именемmy_first_python_model.py. -
В файле
my_first_python_model.pyдобавьте следующий код:def model(dbt, session):
dbt.config(submission_method="bigframes")
bdf = dbt.ref("my_sql_model") #loading from prev step
return bdf -
Настройте метод отправки BigFrames одним из способов:
a. Конфигурация на уровне проекта через
dbt_project.yml:models:
my_dbt_project:
submission_method: bigframes
python_models:
+materialized: viewили
b. Конфигурация непосредственно в Python‑коде через
dbt.configв файлеmy_first_python_model.py:def model(dbt, session):
dbt.config(submission_method="bigframes")
# rest of the python code... -
Выполните команду
dbt run. -
Логи выполнения можно посмотреть в dbt logs. При необходимости вы также можете просмотреть код и логи (включая предыдущие запуски) на вкладке Colab Enterprise Executions и в GCS bucket в консоли GCP.
-
Поздравляем! Вы только что создали свои первые две Python‑модели, которые выполняются на BigFrames!

