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

Использование defer в dbt Cloud

Defer — это мощная функция, которая позволяет разработчикам строить, запускать и тестировать только те модели, которые они изменили, без необходимости сначала запускать и строить все модели, которые идут перед ними (вышестоящие родительские модели). dbt обеспечивает это, используя манифест продакшена для сравнения и разрешает функцию {{ ref() }} с помощью вышестоящих продакшен-артефактов.

Как IDE dbt Cloud, так и CLI dbt Cloud позволяют пользователям нативно использовать defer к метаданным продакшена непосредственно в их рабочих процессах разработки.

Используйте 'defer', чтобы изменять модели на конце конвейера, указывая на продакшен-модели, вместо того чтобы запускать все вышестоящие модели.Используйте 'defer', чтобы изменять модели на конце конвейера, указывая на продакшен-модели, вместо того чтобы запускать все вышестоящие модели.

При использовании --defer, dbt Cloud будет следовать этому порядку выполнения для разрешения функций {{ ref() }}.

  1. Если существует версия отложенной связи в разработке, dbt предпочтительно использует местоположение базы данных разработки при разрешении ссылки.
  2. Если версия разработки не существует, dbt использует промежуточные местоположения родительских связей на основе метаданных из промежуточной среды.
  3. Если ни версия разработки, ни промежуточная версия не существуют, dbt использует продакшен-местоположения родительских связей на основе метаданных из продакшен-среды.

Примечание: Передача флага --favor-state всегда будет разрешать ссылки, используя промежуточные метаданные, если они доступны; в противном случае, по умолчанию, будут использоваться продакшен-метаданные, независимо от наличия связи разработки, пропуская шаг №1.

Для чистого начала рекомендуется удалять схему разработки в начале и в конце вашего цикла разработки.

Если вам требуются дополнительные средства контроля над продакшен-данными, создайте Промежуточную среду, и dbt будет использовать её, а не продакшен-среду, для разрешения функций {{ ref() }}.

Необходимая настройка

  • Вы должны выбрать флажок Продакшен-среда на странице Настройки среды.
    • Это можно установить для одной среды развертывания на проект dbt Cloud.
  • У вас должен быть успешный запуск задания.

При использовании defer, он сравнивает артефакты из самого последнего успешного продакшен-задания, исключая CI-задания.

Defer в dbt Cloud IDE

Чтобы включить defer в dbt Cloud IDE, переключите кнопку Defer to production на командной панели. После включения dbt Cloud будет:

  1. Загружать самый последний манифест из продакшен-среды для сравнения
  2. Передавать флаг --defer в команду (для любой команды, которая принимает этот флаг)

Например, если вы начнете разработку на новой ветке с пустой схемой разработки, отредактируете одну модель и запустите dbt build -s state:modified — будет запущена только отредактированная модель. Любые функции {{ ref() }} будут указывать на продакшен-местоположение ссылочных моделей.

Выберите переключатель 'Defer to production' в правом нижнем углу командной панели, чтобы включить defer в dbt Cloud IDE.Выберите переключатель 'Defer to production' в правом нижнем углу командной панели, чтобы включить defer в dbt Cloud IDE.

Defer в dbt Cloud CLI

Одно из ключевых отличий использования --defer в dbt Cloud CLI от dbt Cloud IDE заключается в том, что --defer автоматически включен в dbt Cloud CLI для всех вызовов, сравниваемых с продакшен-артефактами. Вы можете отключить его с помощью флага --no-defer.

dbt Cloud CLI предлагает дополнительную гибкость, позволяя вам выбрать исходную среду для артефактов отложенной обработки. Вы можете вручную установить ключ defer-env-id в вашем файле dbt_project.yml или dbt_cloud.yml. По умолчанию, dbt Cloud CLI будет предпочитать метаданные из "Промежуточной" среды проекта (если она определена), в противном случае из "Продакшен".

dbt_cloud.yml
context:
active-host: ...
active-project: ...
defer-env-id: '123456'
dbt_project.yml
dbt-cloud:
defer-env-id: '123456'
0