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

Использование BigQuery DataFrames с dbt Python-моделями

BigQuery
Google
GCP
BigFrames
Quickstart
Intermediate
Menu

    Введение

    В этом руководстве вы узнаете, как настроить 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‑модель.

    Реализация метода отправки BigFramesРеализация метода отправки BigFrames

    Рисунок 1 — Реализация метода отправки BigFrames для Python‑моделей dbt

    Настройте Google Cloud

    Метод отправки BigFrames в dbt поддерживает как service account, так и OAuth‑аутентификацию. В следующих шагах будет использоваться service account.

    1. Создайте новый проект 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.
    2. Создайте 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> на номер проекта.
    3. (Необязательно) Создайте тестовый датасет BigQuery

      Если у вас ещё нет датасета BigQuery, создайте новый:

      #Create BQ dataset 
      bq mk --location=${REGION} echo "${GOOGLE_CLOUD_PROJECT}" | tr '-' '_'_dataset
    4. Создайте бакет 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, выполните следующие шаги:

    1. Перейдите в Account settings > Connections и нажмите New connection.
    2. В разделе Type выберите BigQuery.
    3. Выберите адаптер BigQuery (Legacy).
    4. В разделе Optional settings укажите значения для следующих полей:
      • Google Cloud Storage Bucket (например: dbt_name_bucket)
      • Dataproc Region (например: us-central1)
    5. Нажмите Save.

    Это необходимо для корректного выполнения заданий BigFrames.

    Дополнительную информацию см. в разделе Connect to BigQuery.

    Настройте BigQuery в dbt platformНастройте BigQuery в dbt platform

    Создайте, настройте и выполните ваши Python‑модели

    1. В вашем dbt‑проекте создайте SQL‑модель в каталоге models с расширением .sql. Назовите файл my_sql_model.sql.

    2. Скопируйте в файл следующий SQL‑код:

         select 
      1 as foo,
      2 as bar
    3. Создайте новый файл модели в каталоге models с именем my_first_python_model.py.

    4. В файле 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
    5. Настройте метод отправки 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...

    6. Выполните команду dbt run.

    7. Логи выполнения можно посмотреть в dbt logs. При необходимости вы также можете просмотреть код и логи (включая предыдущие запуски) на вкладке Colab Enterprise Executions и в GCS bucket в консоли GCP.

    8. Поздравляем! Вы только что создали свои первые две Python‑модели, которые выполняются на BigFrames!

    Нашли ошибку?

    0