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

Команды заданий

Production job в dbt позволяет настроить систему, которая будет запускать dbt job и job commands по расписанию, вместо того чтобы выполнять dbt-команды вручную из командной строки или из Studio IDE. Job состоит из команд, которые «цепочкой» выполняются как шаги запуска (run steps). Каждый шаг запуска может завершиться успехом или ошибкой, что влияет на итоговый статус job (Success, Cancel или Error).

Каждая job позволяет вам:

  • Настраивать job commands
  • Просматривать детали запусков job, включая тайминги, артефакты и подробные шаги запуска
  • Открывать логи, чтобы просматривать их, помогать с отладкой проблем и видеть историю запусков dbt
  • Настраивать уведомления и другое

Типы команд job

Job commands — это конкретные задачи, которые выполняются в рамках job. Их можно настроить двумя способами: добавлять dbt-команды или использовать опции‑чекбоксы в разделе Commands.

Во время запуска job команды выполняются «цепочкой» и идут как run steps. При добавлении dbt-команды в разделе Commands вы можете ожидать иные результаты по сравнению с вариантом через чекбоксы.

Настройка чекбоксов и списка командНастройка чекбоксов и списка команд

Встроенные команды

Каждый запуск job автоматически включает команду dbt deps, поэтому вам не нужно добавлять ее в список Commands в настройках job. Также вы заметите, что у каждой job есть шаг повторного клонирования репозитория и подключения к data platform — это может повлиять на статус job, если эти шаги не выполнятся успешно.

Результат job — Во время запуска job built-in commands выполняются «цепочкой». Это означает, что если один из шагов в цепочке падает, последующие команды не выполняются, а вся job завершается со статусом "Error".

Неуспешная job с ошибкой на шаге dbt depsНеуспешная job с ошибкой на шаге dbt deps

Команды-чекбоксы

Для каждой job у вас есть возможность выбрать чекбоксы Generate docs on run или Run source freshness, чтобы запускать эти команды автоматически.

Результат job для чекбокса Generate docs on rundbt выполняет команду dbt docs generate после команд из списка. Если этот шаг падает, job всё равно может завершиться успешно, если все последующие шаги выполнятся успешно. Подробнее см. Set up documentation job.

Результат job для чекбокса Source freshnessdbt выполняет команду dbt source freshness первым шагом запуска в job. Если этот шаг падает, job всё равно может завершиться успешно, если все последующие шаги выполнятся успешно. Подробнее см. Source freshness.

Список команд

Вы можете добавлять и удалять столько dbt-команд, сколько нужно для каждой job. Однако должна быть как минимум одна dbt-команда. На странице dbt Command reference некоторые команды помечены как "dbt CLI" или "dbt Core". Это значит, что они предназначены для использования в dbt Core или dbt CLI, а не в Studio IDE.

Используйте selectors

Используйте selectors как мощный способ выбирать и выполнять части проекта во время запуска job. Например, чтобы запускать тесты для one_specific_model, используйте селектор: dbt test --select one_specific_model. Job всё равно выполнится, даже если selector не совпадет ни с одной моделью.

Кастомные команды для Compare changes

Если у вас включена функция Advanced CI compare changes и вы выбрали чекбокс dbt compare, вы можете добавить кастомные dbt-команды, чтобы оптимизировать выполнение сравнения (например, исключить большие модели или группы моделей по тегам). Сравнение на больших моделях может заметно увеличить время выполнения CI jobs.

Добавление кастомных dbt-команд при использовании dbt compareДобавление кастомных dbt-команд при использовании dbt compare

Ниже приведены примеры, показывающие, как можно кастомизировать поле команды dbt compare:

  • Исключить большую модель fct_orders из сравнения, чтобы запускать CI job на меньшем количестве или меньшем размере моделей и сократить время/потребление ресурсов. Используйте следующую команду:

    --select state:modified --exclude fct_orders
  • Исключите модели на основе тегов для сценариев, когда модели имеют общую функцию или характеристику. Используйте следующую команду:

       --select state modified --exclude tag:tagname_a tag:tagname_b
  • Включите модели, которые были непосредственно изменены, а также те, которые находятся на один шаг ниже по потоку, используя селектор modified+1. Используйте следующую команду:

    --select state:modified+1

Результат job

Во время запуска job команды выполняются «цепочкой» и идут как run steps. Если один из шагов в цепочке падает, последующие шаги не выполняются, и job завершится с ошибкой.

На изображении ниже первые четыре run steps успешны. Однако если пятый шаг (dbt run --select state:modified+ --full-refresh --fail-fast) падает, следующие шаги не выполняются, и вся job завершается с ошибкой. Неуспешная job возвращает ненулевой exit code и статус job "Error":

Неуспешный запуск job с ошибкой на run stepНеуспешный запуск job с ошибкой на run step

Ошибки выполнения job commands

Ошибки job commands могут означать разные вещи для разных команд. Некоторые распространенные причины, по которым job command может завершиться неуспешно:

  • Ошибка на dbt rundbt run выполняет скомпилированные SQL-файлы моделей в текущей target database. Команда упадет, если в любой из собранных моделей есть ошибка. Тесты на upstream-ресурсах предотвращают запуск downstream-ресурсов, а упавший тест приведет к пропуску downstream.

  • Ошибка на dbt testdbt test запускает тесты, определенные для моделей, sources, snapshots и seeds. Тест может пройти, упасть или выдать warning в зависимости от его severity. Если вы не настроили warnings как errors, только error останавливает следующий шаг.

  • Ошибка на dbt builddbt build запускает модели, тесты, snapshots и seeds. Эта команда выполняет ресурсы в порядке, заданном DAG. Если любой upstream-ресурс упадет, все downstream-ресурсы будут пропущены, и команда завершится с кодом ошибки 1.

  • Ошибки selector’ов

    • Если select выбирает несколько нод и одна из них падает, job получит exit code 1, а последующая команда в job завершится ошибкой. Если вы указали флаг —fail-fast, то первая ошибка остановит всё выполнение для моделей, которые выполняются в данный момент.

    • Если selector не совпадает ни с одной нодой, это не считается ошибкой.

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

0
Loading