Пока проект «Гонца» жил только у тебя на ноутбуке, ты запускал dbt build руками и смотрел на результат. Теперь витрину Отто должны пересобирать каждое утро, сразу после того как DAG gonets_daily загрузил вчерашние заказы. И делать это не в твоей схеме dbt_dev, где ты экспериментируешь, а там, откуда читает дашборд. Нужно два окружения и оркестратор, который запустит dbt в правильный момент.
Репетиция и спектакль
В театре есть репетиционный зал и сцена. Пьеса одна, актёры те же, но на репетиции можно остановиться посреди сцены, перепутать реплику, попробовать другой свет. Зритель этого не видит. На сцену выходят, когда всё отрепетировано, и там ошибка стоит дорого.
У dbt то же самое. Проект один, а запускать его можно в разные окружения: в твою личную схему для репетиций и в общую продовую для зрителей.
Таргеты в profiles.yml
Окружение в dbt описывается таргетом, это блок внутри профиля из урока про profiles.yml:
gonets:
target: dev
outputs:
dev:
type: postgres
host: localhost
port: 5432
user: student
password: student
dbname: gonets
schema: dbt_dev
threads: 1
prod:
type: postgres
host: localhost
port: 5432
user: student
password: student
dbname: gonets
schema: analytics
threads: 1
Ключ target: dev говорит, какой таргет брать по умолчанию. Обычная команда dbt build пишет в dbt_dev, а dbt build --target prod в analytics. Код моделей при этом не меняется: ref() сам подставит нужную схему.
На настоящем проде пользователь и пароль другие, и их не хранят в файле открытым текстом. Пишут password: "{{ env_var('DBT_PROD_PASSWORD') }}", а значение кладут в переменную окружения на сервере.
target внутри моделей
Имя таргета доступно в Jinja как target.name, схема как target.schema. Так в разработке можно брать не весь объём данных, а последнюю неделю, чтобы модели собирались быстрее:
select *
from {{ source('raw', 'orders') }}
{% if target.name == 'dev' %}
where created_at >= '2026-06-24'
{% endif %}
И через target.name чаще всего переопределяют generate_schema_name из урока про dbt_project.yml: в dev всё складывают в личную схему, а на проде витрины кладут ровно в marts. Это и будет задачей урока.
урок из курса
Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.
Оплата пока не подключена: премиум и курсы открываются промокодом.