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

Быстрый старт с dbt и BigQuery

BigQuery
Platform
Quickstart
Beginner
Menu

    Введение

    В этом кратком руководстве вы узнаете, как использовать dbt с BigQuery. В нём показано, как:

    • Создать проект в Google Cloud Platform (GCP).
    • Получить доступ к примерным данным в публичном датасете.
    • Подключить dbt к BigQuery.
    • Взять пример запроса и превратить его в модель в вашем dbt‑проекте. Модель в dbt — это оператор select.
    • Добавить тесты к вашим моделям.
    • Задокументировать ваши модели.
    • Запланировать выполнение задания.
    Видео для вас

    Вы можете бесплатно ознакомиться с Основами dbt, если вас интересует обучение с видео.

    Предварительные требования

    Создание нового проекта GCP

    1. Перейдите в Консоль BigQuery после входа в ваш аккаунт Google. Если у вас несколько аккаунтов Google, убедитесь, что вы используете правильный.
    2. Создайте новый проект на странице управления ресурсами. Для получения дополнительной информации обратитесь к Создание проекта в документации Google Cloud. GCP автоматически заполняет поле имени проекта для вас. Вы можете изменить его на более описательное для вашего использования. Например, dbt Learn - BigQuery Setup.

    Создание наборов данных BigQuery

    1. В Консоли BigQuery нажмите Редактор. Убедитесь, что выбран ваш недавно созданный проект, который доступен в верхней части страницы.

    2. Убедитесь, что вы можете выполнять SQL-запросы. Скопируйте и вставьте эти запросы в редактор запросов:

      select * from `dbt-tutorial.jaffle_shop.customers`;
      select * from `dbt-tutorial.jaffle_shop.orders`;
      select * from `dbt-tutorial.stripe.payment`;

      Нажмите Выполнить, затем проверьте результаты запросов. Например:

      Результаты запроса BigqueryРезультаты запроса Bigquery
    3. Создайте новые наборы данных в Консоли BigQuery. Для получения дополнительной информации обратитесь к Создание наборов данных в документации Google Cloud. Наборы данных в BigQuery эквивалентны схемам в традиционной базе данных. На странице Создать набор данных:

      • ID набора данных — Введите имя, соответствующее цели. Это имя используется как схема в полностью квалифицированных ссылках на ваши объекты базы данных, такие как database.schema.table. В качестве примера для этого руководства создайте один для jaffle_shop, а затем другой для stripe.
      • Расположение данных — Оставьте пустым (по умолчанию). Это определяет местоположение GCP, где хранятся ваши данные. Текущее местоположение по умолчанию — многорегион США. Все таблицы в этом наборе данных будут использовать это местоположение.
      • Включить истечение срока действия таблицы — Оставьте невыбранным (по умолчанию). По умолчанию срок действия таблицы выставления счетов составляет 60 дней. Поскольку выставление счетов не включено для этого проекта, GCP по умолчанию устаревшие таблицы.
      • Ключ шифрования, управляемый Google — Эта опция доступна в разделе Дополнительные параметры. Разрешите Google управлять шифрованием (по умолчанию).
      Создание ID набора данных BigqueryСоздание ID набора данных Bigquery
    4. После создания набора данных jaffle_shop создайте один для stripe с теми же значениями, кроме ID набора данных.

    Генерация учетных данных BigQuery

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

    1. Запустите мастер учетных данных GCP. Убедитесь, что ваш новый проект выбран в заголовке. Если вы не видите свой аккаунт или проект, нажмите на изображение профиля справа и убедитесь, что вы используете правильный адрес электронной почты. Для Тип учетных данных:
      • В выпадающем списке Выберите API выберите BigQuery API
      • Выберите Данные приложения для типа данных, к которым вы будете получать доступ
      • Нажмите Далее, чтобы создать новую учетную запись службы.
    2. Создайте учетную запись службы для вашего нового проекта на странице учетных записей службы. Для получения дополнительной информации обратитесь к Создание учетной записи службы в документации Google Cloud. В качестве примера для этого руководства вы можете:
      • Введите dbt-user как Имя учетной записи службы
      • В выпадающем списке Выберите роль выберите роли Пользователь заданий BigQuery и Редактор данных BigQuery и нажмите Продолжить
      • Оставьте поля Предоставить пользователям доступ к этой учетной записи службы пустыми
      • Нажмите Готово
    3. Создайте ключ учетной записи службы для вашего нового проекта на странице учетных записей службы. Для получения дополнительной информации обратитесь к Создание ключа учетной записи службы в документации Google Cloud. При загрузке файла JSON убедитесь, что используете имя файла, которое вы легко запомните. Например, dbt-user-creds.json. По соображениям безопасности dbt Labs рекомендует защищать этот файл JSON так же, как вы защищаете свои учетные данные; например, не добавляйте файл JSON в ваше программное обеспечение для управления версиями.

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

    1. Создайте новый проект в dbt. Перейдите в Account settings (кликнув по имени вашего аккаунта в левом меню) и нажмите + New project.
    2. Введите имя проекта и нажмите Continue.
    3. В качестве хранилища данных выберите BigQuery, затем нажмите Next, чтобы настроить подключение.
    4. В настройках нажмите Upload a Service Account JSON File.
    5. Выберите JSON-файл, который вы скачали на шаге Generate BigQuery credentials, и dbt автоматически заполнит все необходимые поля.
    6. Необязательно — тарифы dbt Enterprise могут настроить developer OAuth с BigQuery, что обеспечивает дополнительный уровень безопасности. Подробнее см. в разделе Set up BigQuery OAuth.
    7. Нажмите Test Connection. Это проверит, что dbt имеет доступ к вашему аккаунту BigQuery.
    8. Если тест прошёл успешно, нажмите Next. Если тест не удался, возможно, потребуется вернуться назад и заново сгенерировать учётные данные BigQuery.

    Настройка репозитория под управлением dbt

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

    Чтобы подключиться к репозиторию, вы можете либо настроить размещённый в dbt managed repository, либо напрямую подключиться к поддерживаемому git‑провайдеру. Managed repositories — это отличный способ попробовать dbt без необходимости создавать новый репозиторий. В долгосрочной перспективе лучше подключиться к поддерживаемому git‑провайдеру, чтобы использовать такие возможности, как автоматизация и непрерывная интеграция.

    Чтобы настроить управляемый репозиторий:

    1. В разделе "Настроить репозиторий" выберите Управляемый.
    2. Введите имя для вашего репозитория, например, bbaggins-dbt-quickstart.
    3. Нажмите Создать. Создание и импорт вашего репозитория займет несколько секунд.
    4. Как только вы увидите сообщение "Репозиторий успешно импортирован", нажмите Продолжить.

    Инициализация вашего проекта dbt и начало разработки

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

    Инициализируйте ваш dbt‑проект и начните разработку

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

    1. Нажмите Start developing in the Studio IDE. При первом запуске это может занять несколько минут, так как система устанавливает подключение к git, клонирует репозиторий и проверяет соединение с хранилищем данных.
    2. В левой части интерфейса, над деревом файлов, нажмите Initialize dbt project. Это создаст структуру папок с примерами моделей.
    3. Сделайте первый коммит, нажав Commit and sync. Используйте сообщение коммита initial commit и нажмите Commit. Это создаст первый коммит в управляемом репозитории и позволит открыть ветку, в которой вы сможете добавлять новый dbt‑код.
    4. Теперь вы можете напрямую выполнять запросы к вашему хранилищу данных и запускать dbt run. Вы можете попробовать это прямо сейчас:
      • Нажмите + Create new file, добавьте этот запрос в новый файл и нажмите Save as, чтобы сохранить файл:
        select * from `dbt-tutorial.jaffle_shop.customers`
      • В командной строке внизу введите dbt run и нажмите Enter. Вы должны увидеть сообщение dbt run succeeded.

    Создание вашей первой модели

    У вас есть два варианта работы с файлами в Studio IDE:

    • Создать новую ветку (рекомендуется) — Создайте новую ветку, чтобы редактировать файлы и коммитить изменения. Перейдите в раздел Version Control на левой боковой панели и нажмите Create branch.
    • Редактировать в защищённой основной ветке — Если вы предпочитаете редактировать, форматировать или линтить файлы, а также выполнять команды dbt напрямую в вашей основной git-ветке. Studio IDE не позволяет выполнять коммиты в защищённую ветку, поэтому вам будет предложено закоммитить изменения в новую ветку.

    Назовите новую ветку add-customers-model.

    1. Нажмите ... рядом с директорией models, затем выберите Создать файл.
    2. Назовите файл customers.sql, затем нажмите Создать.
    3. Скопируйте следующий запрос в файл и нажмите Сохранить.
    with customers as (

    select
    id as customer_id,
    first_name,
    last_name

    from `dbt-tutorial`.jaffle_shop.customers

    ),

    orders as (

    select
    id as order_id,
    user_id as customer_id,
    order_date,
    status

    from `dbt-tutorial`.jaffle_shop.orders

    ),

    customer_orders as (

    select
    customer_id,

    min(order_date) as first_order_date,
    max(order_date) as most_recent_order_date,
    count(order_id) as number_of_orders

    from orders

    group by 1

    ),

    final as (

    select
    customers.customer_id,
    customers.first_name,
    customers.last_name,
    customer_orders.first_order_date,
    customer_orders.most_recent_order_date,
    coalesce(customer_orders.number_of_orders, 0) as number_of_orders

    from customers

    left join customer_orders using (customer_id)

    )

    select * from final
    1. Введите dbt run в командной строке внизу экрана. Вы должны получить успешное выполнение и увидеть три модели.

    Позже вы сможете подключить ваши инструменты бизнес-аналитики (BI) к этим представлениям и таблицам, чтобы они читали только очищенные данные, а не сырые данные в вашем инструменте BI.

    Часто задаваемые вопросы

    Как посмотреть SQL, который выполняет dbt?
    Как dbt выбирает, в какой схеме строить мои модели?
    Нужно ли создавать целевую схему перед запуском dbt?
    Если я перезапущу dbt, будет ли простой, пока модели перестраиваются?
    Что произойдет, если в моем SQL-запросе ошибка или я получу ошибку базы данных?

    Изменение способа материализации вашей модели

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

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

    1. Отредактируйте ваш файл dbt_project.yml.

      • Обновите имя вашего проекта на:

        dbt_project.yml
        name: 'jaffle_shop'
      • Настройте jaffle_shop так, чтобы всё внутри него материализовалось как таблица; и настройте example так, чтобы всё внутри него материализовалось как представление (view). Обновите конфигурацию models в YAML-файле проекта следующим образом:

        dbt_project.yml
        models:
        jaffle_shop:
        +materialized: table
        example:
        +materialized: view
      • Нажмите Сохранить.

    2. Введите команду dbt run. Ваша модель customers теперь должна быть построена как таблица!

      к сведению

      Для этого dbt сначала должен был выполнить оператор drop view (или API вызов на BigQuery), затем оператор create table as.

    3. Отредактируйте models/customers.sql, чтобы переопределить dbt_project.yml только для модели customers, добавив следующий фрагмент в начало, и нажмите Сохранить:

      models/customers.sql
      {{
      config(
      materialized='view'
      )
      }}

      with customers as (

      select
      id as customer_id
      ...

      )

    4. Введите команду dbt run. Ваша модель customers теперь должна быть построена как представление.

      • Пользователям BigQuery необходимо выполнить dbt run --full-refresh вместо dbt run, чтобы полностью применить изменения материализации.
    5. Введите команду dbt run --full-refresh, чтобы изменения вступили в силу в вашем хранилище данных.

    Часто задаваемые вопросы

    Какие материализации доступны в dbt?
    Какую материализацию использовать для моей модели?
    Какие существуют конфигурации моделей?

    Удаление примерных моделей

    Теперь вы можете удалить файлы, которые dbt создал при инициализации проекта:

    1. Удалите директорию models/example/.

    2. Удалите ключ example: из вашего файла dbt_project.yml, а также любые конфигурации, которые перечислены под ним.

      dbt_project.yml
      # до
      models:
      jaffle_shop:
      +materialized: table
      example:
      +materialized: view
      dbt_project.yml
      # после
      models:
      jaffle_shop:
      +materialized: table
    3. Сохраните изменения.

    Часто задаваемые вопросы

    Как удалить удаленные модели из моего хранилища данных?
    Я получил сообщение об ошибке "неиспользуемые конфигурации модели", что это значит?

    Построение моделей на основе других моделей

    Как лучшая практика в SQL, следует разделять логику, которая очищает ваши данные, от логики, которая трансформирует ваши данные. Вы уже начали делать это в существующем запросе, используя общие табличные выражения (CTE).

    Теперь вы можете поэкспериментировать, разделив логику на отдельные модели и используя функцию ref для построения моделей на основе других моделей:

    Граф, который мы хотим для нашего проекта dbtГраф, который мы хотим для нашего проекта dbt
    1. Создайте новый SQL файл, models/stg_customers.sql, с SQL из CTE customers в нашем оригинальном запросе.

    2. Создайте второй новый SQL файл, models/stg_orders.sql, с SQL из CTE orders в нашем оригинальном запросе.

      models/stg_customers.sql
      select
      id as customer_id,
      first_name,
      last_name

      from `dbt-tutorial`.jaffle_shop.customers
      models/stg_orders.sql
      select
      id as order_id,
      user_id as customer_id,
      order_date,
      status

      from `dbt-tutorial`.jaffle_shop.orders
    3. Отредактируйте SQL в вашем файле models/customers.sql следующим образом:

      models/customers.sql
      with customers as (

      select * from {{ ref('stg_customers') }}

      ),

      orders as (

      select * from {{ ref('stg_orders') }}

      ),

      customer_orders as (

      select
      customer_id,

      min(order_date) as first_order_date,
      max(order_date) as most_recent_order_date,
      count(order_id) as number_of_orders

      from orders

      group by 1

      ),

      final as (

      select
      customers.customer_id,
      customers.first_name,
      customers.last_name,
      customer_orders.first_order_date,
      customer_orders.most_recent_order_date,
      coalesce(customer_orders.number_of_orders, 0) as number_of_orders

      from customers

      left join customer_orders using (customer_id)

      )

      select * from final

    4. Выполните dbt run.

      На этот раз, когда вы выполнили dbt run, были созданы отдельные представления/таблицы для stg_customers, stg_orders и customers. dbt определил порядок выполнения этих моделей. Поскольку customers зависит от stg_customers и stg_orders, dbt строит customers последним. Вам не нужно явно определять эти зависимости.

    Построение моделей поверх источников данных

    Источники позволяют задавать имена и описывать данные, загруженные в ваш хранилище с помощью инструментов извлечения и загрузки (extract & load). Объявляя эти таблицы как источники в dbt, вы можете:

    • выбирать данные из исходных таблиц в своих моделях с помощью функции {{ source() }}, что помогает определить lineage (происхождение и зависимости) ваших данных
    • проверять свои предположения о данных в источниках
    • вычислять актуальность (freshness) данных в источниках
    1. Создайте новый YML-файл models/sources.yml.

    2. Объявите источники, скопировав следующий код в файл и нажав Save.

      models/sources.yml

      sources:
      - name: jaffle_shop
      description: This is a replica of the Postgres database used by our app
      database: dbt-tutorial
      schema: jaffle_shop
      tables:
      - name: customers
      description: One record per customer.
      - name: orders
      description: One record per order. Includes cancelled and deleted orders.
    3. Отредактируйте файл models/stg_customers.sql, чтобы выбирать данные из таблицы customers источника jaffle_shop.

      models/stg_customers.sql
      select
      id as customer_id,
      first_name,
      last_name

      from {{ source('jaffle_shop', 'customers') }}
    4. Отредактируйте файл models/stg_orders.sql, чтобы выбирать данные из таблицы orders источника jaffle_shop.

      models/stg_orders.sql
      select
      id as order_id,
      user_id as customer_id,
      order_date,
      status

      from {{ source('jaffle_shop', 'orders') }}
    5. Выполните команду dbt run.

      Результаты выполнения dbt run будут точно такими же, как и на предыдущем шаге. Модели stg_customers и stg_orders по‑прежнему будут обращаться к тем же самым исходным данным в BigQuery. Однако использование source позволяет тестировать и документировать «сырые» данные, а также лучше понимать lineage ваших источников данных.

    FAQs

    Как запустить одну модель за раз?
    Должны ли имена ресурсов, используемых в ref, быть уникальными?
    Как я создаю больше моделей, как мне организовать мой проект? Как мне назвать мои модели?

    Добавьте тесты к вашим моделям

    Добавление data tests в проект помогает убедиться, что ваши модели работают корректно.

    Чтобы добавить data tests в проект:

    1. Создайте новый YAML-файл в директории models, назвав его models/schema.yml.

    2. Добавьте в файл следующее содержимое:

      models/schema.yml
      version: 2

      models:
      - name: customers
      columns:
      - name: customer_id
      data_tests:
      - unique
      - not_null

      - name: stg_customers
      columns:
      - name: customer_id
      data_tests:
      - unique
      - not_null

      - name: stg_orders
      columns:
      - name: order_id
      data_tests:
      - unique
      - not_null
      - name: status
      data_tests:
      - accepted_values:
      arguments: # available in v1.10.5 and higher. Older versions can set the <argument_name> as the top-level property.
      values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
      - name: customer_id
      data_tests:
      - not_null
      - relationships:
      arguments:
      to: ref('stg_customers')
      field: customer_id

    3. Запустите dbt test и убедитесь, что все ваши тесты прошли успешно.

    Когда вы запускаете dbt test, dbt проходит по вашим YAML-файлам и создает запрос для каждого теста. Каждый запрос вернет количество записей, которые не прошли тест. Если это число равно 0, то тест считается успешным.

    Часто задаваемые вопросы

    Какие тесты доступны для использования в dbt? Могу ли я добавить свои собственные тесты?
    Как протестировать одну модель за раз?
    Один из моих тестов не прошел, как я могу его отладить?
    Должен ли мой файл с тестами называться `schema.yml`?
    Почему файлы YAML для моделей и источников всегда начинаются с `version: 2`?
    What data tests should I add to my project?
    Когда следует запускать data tests?

    Документируйте ваши модели

    Добавление документации в ваш проект позволяет подробно описывать ваши модели и делиться этой информацией с вашей командой. Здесь мы добавим базовую документацию в наш проект.

    1. Обновите ваш файл models/schema.yml, чтобы включить в него некоторые описания, как показано ниже.

      models/schema.yml
      version: 2

      models:
      - name: customers
      description: Одна запись на каждого клиента
      columns:
      - name: customer_id
      description: Первичный ключ
      data_tests:
      - unique
      - not_null
      - name: first_order_date
      description: NULL, если клиент еще не сделал заказ.

      - name: stg_customers
      description: Эта модель очищает данные о клиентах
      columns:
      - name: customer_id
      description: Первичный ключ
      data_tests:
      - unique
      - not_null

      - name: stg_orders
      description: Эта модель очищает данные о заказах
      columns:
      - name: order_id
      description: Первичный ключ
      data_tests:
      - unique
      - not_null
      - name: status
      data_tests:
      - accepted_values:
      arguments: # available in v1.10.5 and higher. Older versions can set the <argument_name> as the top-level property.
      values: ['placed', 'shipped', 'completed', 'return_pending', 'returned']
      - name: customer_id
      data_tests:
      - not_null
      - relationships:
      arguments:
      to: ref('stg_customers')
      field: customer_id
    2. Запустите dbt docs generate, чтобы сгенерировать документацию для вашего проекта. dbt анализирует ваш проект и ваш склад данных, чтобы создать JSON файл с подробной документацией о вашем проекте.

    1. Нажмите на значок книги в интерфейсе Develop, чтобы открыть документацию в новой вкладке.

    Часто задаваемые вопросы

    Как писать развернутые объяснения в описаниях?
    Как получить доступ к документации в dbt Catalog?

    Зафиксируйте изменения

    Теперь, когда вы построили модель customers, нужно закоммитить внесённые в проект изменения, чтобы в репозитории оказался ваш актуальный код.

    Если вы редактировали прямо в защищённой основной ветке:

    1. Нажмите кнопку Commit and sync git. Это действие подготовит ваши изменения к коммиту.
    2. Появится модальное окно Commit to a new branch.
    3. В модальном окне задайте имя новой ветки add-customers-model. Эта ветка будет создана от вашей основной ветки вместе с новыми изменениями.
    4. Добавьте сообщение коммита, например «Add customers model, tests, docs», и закоммитьте изменения.
    5. Нажмите Merge this branch to main, чтобы добавить эти изменения в ветку main вашего репозитория.

    Если вы создали новую ветку до редактирования:

    1. Поскольку вы уже ответвились от защищённой основной ветки, слева перейдите в Version Control.
    2. Нажмите Commit and sync, чтобы добавить сообщение.
    3. Добавьте сообщение коммита, например «Add customers model, tests, docs».
    4. Нажмите Merge this branch to main, чтобы добавить эти изменения в ветку main вашего репозитория.

    Разверните dbt

    Используйте Scheduler в dbt, чтобы уверенно разворачивать продакшен‑джобы и добавлять наблюдаемость в ваши процессы. В следующих шагах вы научитесь создавать deployment environment и запускать job.

    Создайте окружение развертывания (deployment environment)

    1. В главном меню перейдите в Orchestration > Environments.
    2. Нажмите Create environment.
    3. В поле Name введите имя окружения развертывания. Например, «Production».
    4. В поле dbt Version выберите последнюю версию из выпадающего списка.
    5. В разделе Deployment connection укажите имя датасета, который вы хотите использовать как target, например «Analytics». Это позволит dbt собирать объекты и работать с этим датасетом. В некоторых хранилищах данных целевой датасет может называться «schema».
    6. Нажмите Save.

    Создайте и запустите job

    Jobs — это набор команд dbt, которые вы хотите запускать по расписанию. Например, dbt build.

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

    1. После создания окружения развертывания вы должны попасть на страницу нового окружения. Если нет — в главном меню выберите Orchestration, затем нажмите Jobs.
    2. Нажмите Create job > Deploy job.
    3. Укажите имя job (например, «Production run») и выберите окружение, которое вы только что создали.
    4. Прокрутите вниз до раздела Execution settings.
    5. В разделе Commands добавьте эту команду как часть job, если её нет:
      • dbt build
    6. Выберите опцию Generate docs on run, чтобы автоматически генерировать обновлённую документацию проекта при каждом запуске job.
    7. Для этого упражнения не задавайте расписание запуска проекта — хотя проекты в вашей организации должны выполняться регулярно, нет необходимости запускать этот примерный проект по расписанию. Планирование job иногда называют развёртыванием проекта.
    8. Нажмите Save, затем Run now, чтобы запустить job.
    9. Откройте запуск и следите за прогрессом в Run summary.
    10. Когда запуск завершится, нажмите View Documentation, чтобы посмотреть документацию проекта.

    Поздравляем 🎉! Вы только что развернули свой первый dbt‑проект!

    FAQs

    Что произойдет, если один из моих запусков завершится неудачей?

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

    0