Быстрый старт для dbt Core с ручной установкой
Введение
Когда вы используете dbt Core для работы с dbt, вы будете редактировать файлы локально с помощью редактора кода и запускать проекты через интерфейс командной строки (CLI).
Если вы хотите редактировать файлы и запускать проекты с использованием веб‑ориентированной интегрированной среды разработки dbt (Studio IDE), обратитесь к кратким руководствам dbt. Вы также можете разрабатывать и выполнять команды dbt с помощью CLI dbt — командной строки, работающей на базе dbt.
Предварительные требования
- Чтобы использовать dbt Core, важно знать основы работы с Терминалом. В частности, вы должны понимать, как работают команды
cd,lsиpwd, чтобы легко перемещаться по структуре каталогов на вашем компьютере. - Установите dbt Core с помощью инструкций по установке для вашей операционной системы.
- Выполните соответствующие шаги по настройке и загрузке данных в разделе Quickstart для серии dbt. Например, для BigQuery выполните шаги Setting up (in BigQuery) и Loading data (BigQuery).
- Создайте аккаунт GitHub, если у вас его ещё нет.
Создание стартового проекта
После настройки BigQuery для работы с dbt вы готовы создать стартовый проект с примерами моделей, прежде чем создавать собственные модели.
Создание репозитория
В следующих шагах в качестве Git‑провайдера для этого руководства используется GitHub, но вы можете использовать любой Git‑провайдер. Предполагается, что вы уже создали аккаунт GitHub.
-
Создайте новый репозиторий GitHub с именем
dbt-tutorial. -
Выберите один из следующих вариантов (вы всегда сможете изменить эту настройку позже):
- Private (рекомендуется): для защиты вашей среды и предотвращения публикации приватной информации (например, учетных данных).
- Public: если вам нужно легко сотрудничать и делиться проектом с другими, особенно за пределами вашей организации.
-
Оставьте значения по умолчанию для всех остальных настроек.
-
Нажмите Create repository.
-
Сохраните команды из раздела «…or create a new repository on the command line», чтобы использовать их позже в шаге Commit your changes.
Создание проекта
Узнайте, как использовать серию команд в командной строке Терминала для создания вашего проекта. dbt Core включает команду init, которая помогает создать каркас проекта dbt.
Чтобы создать ваш dbt проект:
- Убедитесь, что dbt Core установлен, и проверьте версию с помощью команды
dbt --version:
dbt --version
- Инициализируйте проект
jaffle_shopс помощью командыinit:
dbt init jaffle_shop
- Перейдите в директорию вашего проекта:
cd jaffle_shop
- Используйте
pwd, чтобы убедиться, что вы находитесь в нужном месте:
$ pwd
> Users/BBaggins/dbt-tutorial/jaffle_shop
- Используйте текстовый редактор, такой как Atom или VSCode, чтобы открыть директорию проекта, которую вы создали на предыдущих шагах, и которую мы назвали jaffle_shop. Содержимое включает папки и файлы
.sqlи.yml, сгенерированные командойinit.
- dbt предоставляет следующие значения в файле
dbt_project.yml:
name: jaffle_shop # Измените с значения по умолчанию, `my_new_project`
...
profile: jaffle_shop # Измените с имени профиля по умолчанию, `default`
...
models:
jaffle_shop: # Измените с `my_new_project`, чтобы соответствовать предыдущему значению для `name:`
...
Подключение к BigQuery
При локальной разработке dbt подключается к вашему data warehouse с использованием профиля, который является YAML файлом со всеми деталями подключения к вашему хранилищу.
- Создайте файл в директории
~/.dbt/с именемprofiles.yml. - Переместите ваш ключевой файл BigQuery в эту директорию.
- Скопируйте следующее и вставьте в новый файл profiles.yml. Убедитесь, что вы обновили значения, где это указано.
jaffle_shop: # это должно совпадать с профилем в вашем файле dbt_project.yml
target: dev
outputs:
dev:
type: bigquery
method: service-account
keyfile: /Users/BBaggins/.dbt/dbt-tutorial-project-331118.json # замените это на полный путь к вашему ключевому файлу
project: grand-highway-265418 # Замените это на ваш project id
dataset: dbt_bbagins # Замените это на dbt_ваше_имя, например, dbt_bilbo
threads: 1
timeout_seconds: 300
location: US
priority: interactive
- Запустите команду
debugиз вашего проекта, чтобы подтвердить, что вы можете успешно подключиться:
$ dbt debug
> Connection test: OK connection ok
Часто задаваемые вопросы
Выполнение вашего первого dbt run
Наш пример проекта содержит некоторые примерные модели. Мы проверим, можем ли мы их запустить, чтобы убедиться, что все в порядке.
- Введите команду
run, чтобы построить примерные модели:
dbt run
Вы должны получить вывод, который выглядит следующим образом:
Зафиксируйте ваши изменения
Зафиксируйте ваши изменения, чтобы репозиторий содержал последний код.
- Свяжите созданный вами репозиторий GitHub с вашим проектом dbt, выполнив следующие команды в Terminal. Убедитесь, что вы используете корректный git URL вашего репозитория, который вы должны были сохранить на шаге 5 в разделе Create a repository.
git init
git branch -M main
git add .
git commit -m "Create a dbt project"
git remote add origin https://github.com/USERNAME/dbt-tutorial.git
git push -u origin main
- Вернитесь в ваш репозиторий GitHub, чтобы убедиться, что ваши новые файлы были добавлены.
Создайте ваши первые модели
Теперь, когда вы настроили ваш примерный проект, вы можете перейти к интересной части — созданию моделей! В следующих шагах вы возьмете пример запроса и превратите его в модель в вашем проекте dbt.
Переключитесь на новую ветку git
Переключитесь на новую ветку git, чтобы работать над новым кодом:
- Создайте новую ветку, используя команду
checkoutи передав флаг-b:
$ git checkout -b add-customers-model
> Switched to a new branch `add-customer-model`
Создайте вашу первую модель
- Откройте ваш проект в вашем любимом текстовом редакторе.
- Создайте новый SQL файл в директории
models, названныйmodels/customers.sql. - Вставьте следующий запрос в файл
models/customers.sql.
- BigQuery
- Databricks
- Redshift
- Snowflake
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
with customers as (
select
id as customer_id,
first_name,
last_name
from jaffle_shop_customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from 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
with customers as (
select
id as customer_id,
first_name,
last_name
from jaffle_shop.customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from 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
with customers as (
select
id as customer_id,
first_name,
last_name
from raw.jaffle_shop.customers
),
orders as (
select
id as order_id,
user_id as customer_id,
order_date,
status
from raw.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
Этот код SQL выполняет объединение данных из таблиц customers и orders, чтобы получить информацию о клиентах и их заказах. Он создает временные таблицы customers, orders и customer_orders, а затем объединяет их в финальную таблицу final, которая содержит идентификатор клиента, его имя и фамилию, дату первого и последнего заказа, а также количество заказов.
- Из командной строки введите
dbt run.
Когда вы вернетесь в консоль BigQuery, вы можете выполнить select из этой модели.
Часто задаваемые вопросы
Измените способ материализации вашей модели
Одной из самых мощных функций dbt является возможность изменять способ материализации модели в вашем хранилище данных, просто изменяя значение конфигурации. Вы можете переключаться между таблицами и представлениями, изменяя ключевое слово, вместо того чтобы писать язык определения данных (DDL) для выполнения этого за кулисами.
По умолчанию все создается как представление. Вы можете переопределить это на уровне директории, чтобы все в этой директории материализовалось по-другому.
-
Отредактируйте ваш файл
dbt_project.yml.-
Обновите имя вашего проекта на:
dbt_project.ymlname: 'jaffle_shop' -
Настройте
jaffle_shopтак, чтобы всё внутри него материализовалось как таблица; и настройтеexampleтак, чтобы всё внутри него материализовалось как представление (view). Обновите конфигурациюmodelsв YAML-файле проекта следующим образом:dbt_project.ymlmodels:
jaffle_shop:
+materialized: table
example:
+materialized: view -
Нажмите Сохранить.
-
-
Введите команду
dbt run. Ваша модельcustomersтеперь должна быть построена как таблица!к сведениюДля этого dbt сначала должен был выполнить оператор
drop view(или API вызов на BigQuery), затем операторcreate table as. -
Отредактируйте
models/customers.sql, чтобы переопределитьdbt_project.ymlтолько для моделиcustomers, добавив следующий фрагмент в начало, и нажмите Сохранить:models/customers.sql{{
config(
materialized='view'
)
}}
with customers as (
select
id as customer_id
...
) -
Введите команду
dbt run. Ваша модельcustomersтеперь должна быть построена как представление.- Пользователям BigQuery необходимо выполнить
dbt run --full-refreshвместоdbt run, чтобы полностью применить изменения материализации.
- Пользователям BigQuery необходимо выполнить
-
Введите команду
dbt run --full-refresh, чтобы изменения вступили в силу в вашем хранилище данных.
Часто задаваемые вопросы
Удалите примерные модели
Теперь вы можете удалить файлы, которые dbt создал при инициализации проекта:
-
Удалите директорию
models/example/. -
Удалите ключ
example:из вашего файлаdbt_project.yml, а также любые конфигурации, которые перечислены под ним.dbt_project.yml# до
models:
jaffle_shop:
+materialized: table
example:
+materialized: viewdbt_project.yml# после
models:
jaffle_shop:
+materialized: table -
Сохраните изменения.
Часто задаваемые вопросы
Постройте модели на основе других моделей
Как лучшая практика в SQL, следует разделять логику, которая очищает ваши данные, от логики, которая трансформирует ваши данные. Вы уже начали делать это в существующем запросе, используя общие табличные выражения (CTE).
Теперь вы можете поэкспериментировать, разделив логику на отдельные модели и используя функцию ref для построения моделей на основе других моделей:
- Создайте новый SQL файл,
models/stg_customers.sql, с SQL из CTEcustomersв нашем оригинальном запросе. - Создайте второй новый SQL файл,
models/stg_orders.sql, с SQL из CTEordersв нашем оригинальном запросе.
- BigQuery
- Databricks
- Redshift
- Snowflake
select
id as customer_id,
first_name,
last_name
from `dbt-tutorial`.jaffle_shop.customers
select
id as order_id,
user_id as customer_id,
order_date,
status
from `dbt-tutorial`.jaffle_shop.orders
select
id as customer_id,
first_name,
last_name
from jaffle_shop_customers
select
id as order_id,
user_id as customer_id,
order_date,
status
from jaffle_shop_orders
select
id as customer_id,
first_name,
last_name
from jaffle_shop.customers
select
id as order_id,
user_id as customer_id,
order_date,
status
from jaffle_shop.orders
select
id as customer_id,
first_name,
last_name
from raw.jaffle_shop.customers
select
id as order_id,
user_id as customer_id,
order_date,
status
from raw.jaffle_shop.orders
- Отредактируйте 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
- Выполните
dbt run.
На этот раз, когда вы выполнили dbt run, были созданы отдельные представления/таблицы для stg_customers, stg_orders и customers. dbt определил порядок выполнения этих моделей. Поскольку customers зависит от stg_customers и stg_orders, dbt строит customers последним. Вам не нужно явно определять эти зависимости.
Часто задаваемые вопросы
Следующие шаги
Прежде чем двигаться дальше после создания ваших первых моделей, внесите изменения и посмотрите, как это повлияет на ваши результаты:
- Напишите некорректный SQL, чтобы вызвать ошибку — сможете ли вы отладить ошибку?
- Запустите только одну модель за раз. Для получения дополнительной информации смотрите Обзор синтаксиса.
- Сгруппируйте ваши модели с префиксом
stg_в подкаталогstaging. Например,models/staging/stg_customers.sql.- Настройте ваши
stagingмодели как представления (views). - Запустите только
stagingмодели.
- Настройте ваши
Вы также можете исследовать:
- Директорию
target, чтобы увидеть весь скомпилированный SQL. Директорияrunпоказывает операторы create или replace table, которые выполняются, это операторы select, обернутые в правильный DDL. - Файл
logs, чтобы увидеть, как dbt Core регистрирует все действия, происходящие в вашем проекте. Он показывает операторы select, которые выполняются, и python логирование, происходящее при выполнении dbt.
Добавьте тесты к вашим моделям
Добавление data tests в проект помогает убедиться, что ваши модели работают корректно.
Чтобы добавить data tests в проект:
-
Создайте новый YAML-файл в директории
models, назвав егоmodels/schema.yml. -
Добавьте в файл следующее содержимое:
models/schema.ymlversion: 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 -
Запустите
dbt testи убедитесь, что все ваши тесты прошли успешно.
Когда вы запускаете dbt test, dbt проходит по вашим YAML-файлам и создает запрос для каждого теста. Каждый запрос вернет количество записей, которые не прошли тест. Если это число равно 0, то тест считается успешным.
Часто задаваемые вопросы
Документируйте ваши модели
Добавление документации в ваш проект позволяет подробно описывать ваши модели и делиться этой информацией с вашей командой. Здесь мы добавим базовую документацию в наш проект.
-
Обновите ваш файл
models/schema.yml, чтобы включить в него некоторые описания, как показано ниже.models/schema.ymlversion: 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 -
Запустите
dbt docs generate, чтобы сгенерировать документацию для вашего проекта. dbt анализирует ваш проект и ваш склад данных, чтобы создать JSON файл с подробной документацией о вашем проекте.
- Выполните команду
dbt docs serve, чтобы запустить документацию на локальном веб-сайте.
Часто задаваемые вопросы
Следующие шаги
Прежде чем двигаться дальше от тестирования, внесите изменения и посмотрите, как это повлияет на ваши результаты:
- Напишите тест, который не пройдет, например, исключите один из статусов заказа из списка
accepted_values. Как выглядит неудачный тест? Можете ли вы отладить ошибку? - Запустите тесты только для одной модели. Если вы сгруппировали свои модели с префиксом
stg_в отдельную директорию, попробуйте запустить тесты для всех моделей в этой директории. - Используйте блок документации, чтобы добавить описание в формате Markdown к модели.
Зафиксируйте обновленные изменения
Вам нужно зафиксировать изменения, которые вы внесли в проект, чтобы репозиторий содержал ваш последний код.
- Добавьте все ваши изменения в git:
git add -A - Зафиксируйте ваши изменения:
git commit -m "Add customers model, tests, docs" - Отправьте ваши изменения в ваш репозиторий:
git push - Перейдите в ваш репозиторий и откройте pull request, чтобы объединить код в вашу основную ветку.
Запланируйте задание
Мы рекомендуем использовать dbt как самый простой и надёжный способ развёртывания заданий и автоматизации вашего dbt‑проекта в продакшене.
Для получения дополнительной информации о том, как начать, обратитесь к созданию и планированию заданий.
Обзор выполнения задания dbt, который включает сведения о запуске задания, тип триггера, commit SHA, имя окружения, подробные шаги выполнения, логи и многое другое.Для получения дополнительной информации об использовании dbt Core для планирования задания см. запись в блоге dbt airflow.




