Раздел 26 · Data Engineering

Запуск и выбор: run, test, build и селекторы

junior~15 мин

без входаВойди, чтобы отмечать прогресс, вести заметки и решать задачи в редакторе. войти

Утром Отто пишет: в справочнике зон поменяли название района, и дашборд показывает старое. Пересобирать весь проект ради одной модели долго, а собрать только stg_zones мало: витрины, которые из неё читают, останутся со старыми данными. Нужно собрать модель и всё, что от неё зависит. Для этого у dbt есть селекторы.

Генеалогическое древо

Представь семейное древо. Можно позвать на праздник одного человека, а можно его со всеми детьми и внуками. Или со всеми родителями, бабушками и дедушками. Или только тех, кто живёт в одном городе.

Граф dbt устроен так же. У модели есть предки, от которых она зависит, и потомки, которые читают её. Селектор говорит, кого из этой семьи позвать.

Три главные команды

  • dbt run собирает модели и ничего не проверяет;
  • dbt test гоняет тесты по уже собранным моделям;
  • dbt build делает всё по графу: сиды, снапшоты, модели и тесты. Тесты модели идут сразу после неё, и если тест упал, потомки этой модели пропускаются.

На проде почти всегда запускают dbt build: сломанная таблица не уедет дальше в витрины.

Селекторы

Все три команды принимают --select, коротко -s. Вот основные формы:

СелекторЧто выберет
stg_ordersодну модель
+fct_deliveriesмодель и всех её предков
stg_zones+модель и всех её потомков
1+fct_deliveriesмодель и только прямых родителей
+fct_deliveries+предков, саму модель и потомков
tag:dailyвсё с тегом daily
path:models/martsвсё из папки
stg_orders stg_zonesобе модели: пробел значит «или»
tag:daily,path:models/martsтолько то, что подходит под оба: запятая значит «и»

Плюс слева значит «вместе с предками», справа «вместе с потомками». Цифра перед плюсом ограничивает глубину.

--exclude убирает узлы из выборки и понимает тот же язык: dbt build -s stg_zones+ --exclude mart_zone_daily соберёт потомков зон, кроме витрины.

Тесты dbt добирает сам: если выбрана модель, в dbt build и dbt test попадут и её тесты. Это называется косвенным выбором.

урок из курса

Урок из курса «Data Engineering». Курс покупается один раз и остаётся навсегда: 500 ₽.

Оплата пока не подключена: премиум и курсы открываются промокодом.