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

Разработка с использованием deferral на основе состояния production в dbt Wizard

Настройте deferral на основе состояния production в CLI dbt Wizard, чтобы при локальной разработке повторно использовать неизменённые объекты базы данных из другого окружения. Deferral сокращает количество вышестоящих моделей, которые нужно строить при исследовании, внесении и проверке конкретного изменения.

Этот рабочий процесс предназначен для CLI dbt Wizard. dbt platform самостоятельно управляет учётными данными и deferral в собственных интерфейсах dbt Wizard.

Выберите, кто управляет deferral​

dbt Wizard хранит настройки deferral для каждого проекта в ~/.dbt/wizard/wizard_config.toml. Выберите режим, соответствующий вашему текущему способу управления состоянием.

modeКогда использовать
wizardВы хотите, чтобы dbt Wizard создавал и обновлял снимок состояния production на основе целевого окружения из profiles.yml.
manualУ вас уже есть каталог с файлом manifest.json из production, и вы хотите указать путь к нему.
fusion_clouddbt v2 и dbt platform управляют deferral для подключённого окружения.
cloud_clidbt platform CLI управляет учётными данными и deferral через dbt platform.
dbt_stateВаш рабочий процесс с dbt State или run-cache управляет deferral, поэтому dbt Wizard не должен создавать собственный снимок состояния production.
disabledВы не хотите использовать deferral для этого проекта.

В значениях конфигурации используются символы подчёркивания. Например, используйте dbt_state, а не dbt-state.

Поручите Wizard управление состоянием production​

Используйте mode = "wizard", если в вашем profiles.yml есть целевое окружение, на объекты которого вы хотите ссылаться через deferral.

Добавьте или обновите запись проекта, заменив путь и целевое окружение своими значениями:

~/.dbt/wizard/wizard_config.toml
version = 1

[projects."/Users/you/jaffle-shop"]
path = "/Users/you/jaffle-shop/.venv/bin/dbt"

[projects."/Users/you/jaffle-shop".deferral]
mode = "wizard"
target = "prod"
favor_state = true

При запуске dbt Wizard выполняет разбор проекта для целевого окружения production и по умолчанию сохраняет снимок в target/prod-state. Срок действия снимка по умолчанию — 24 часа.

Настройте параметры обновления глобально, если вашему проекту нужны другие аргументы разбора или другое расположение снимка:

~/.dbt/wizard/wizard_config.toml
[global]
prod_parse_on_startup = true
prod_parse_args = ["parse", "--target", "prod"]
prod_state_ttl_hours = 12
prod_state_dir = "/Users/you/.cache/dbt/prod-state"

Если вы явно задаёте global.prod_parse_args, эти аргументы имеют приоритет над значением deferral.target для отдельного проекта.

Используйте существующий каталог состояния​

Используйте mode = "manual", если другой процесс загружает или создаёт артефакты production:

~/.dbt/wizard/wizard_config.toml
[projects."/Users/you/jaffle-shop".deferral]
mode = "manual"
state = "/Users/you/dbt-state/production"
favor_state = true

Каталог state должен содержать совместимый файл manifest.json из production. Поддерживайте артефакты достаточно актуальными, чтобы они соответствовали коду и пакетам в вашей рабочей ветке.

Решите, отдавать ли приоритет состоянию deferral​

По умолчанию favor_state имеет значение true.

  • При favor_state = true объекты из окружения deferral имеют приоритет при разрешении ссылок в dbt.
  • При favor_state = false dbt использует объект, который вы уже создали в окружении разработки, и обращается к состоянию deferral для объектов, недоступных в этом окружении.

Задавайте это значение осознанно. Приоритет состояния полезен, когда вам нужна стабильная исходная версия из production. Отключение этого приоритета полезно, когда вы хотите, чтобы нижестоящие модели использовали модели, уже построенные вами в окружении разработки.

Подробнее о соответствующем поведении dbt см. в разделе --favor-state.

Начните сеанс и проверьте план​

Перезапустите wizard после редактирования wizard_config.toml, а затем используйте запрос, явно указывающий нужное окружение:

I am changing fct_orders. Use the configured production deferral state for
unchanged upstream models. Before running any dbt command, show me the selector,
target, state directory, and whether favor-state will be applied.

Прежде чем одобрить команду, убедитесь, что:

  1. Все новые или изменённые объекты создаются в целевом окружении разработки.
  2. Каталог состояния указывает на нужные артефакты production.
  3. Селектор ограничен ресурсами, необходимыми для задачи.
  4. Поведение --favor-state соответствует вашему выбору.

Deferral меняет то, где dbt разрешает ссылки на ещё не построенные объекты. Он не делает production безопасным целевым окружением для записи. Проверяйте целевое окружение и команду, прежде чем одобрять любую сборку, тест или запрос.

Устранение неполадок deferral​

ПроблемаЧто проверить
dbt Wizard неожиданно создаёт снимок состояния productionПроверьте mode, target и явно заданные значения global.prod_parse_args. Используйте manual, dbt_state или disabled, если состоянием управляет другая система.
Запрос обращается не к тому объектуПроверьте favor_state, целевое окружение разработки и наличие объекта в этом окружении.
Состояние устарелоУменьшите prod_state_ttl_hours, обновите артефакты, которыми управляете вручную, или удалите устаревший снимок перед началом нового сеанса.
dbt не может найти манифестУбедитесь, что state или prod_state_dir указывает на каталог, содержащий manifest.json, а не на сам файл.
Для компиляции нужны флаги, специфичные для проектаЗадайте compile_extra_args в записи проекта. Значения проекта переопределяют глобальные аргументы компиляции.
dbt Wizard использует не тот профильНастройте profile_override.path, profile_override.profile и profile_override.target для проекта.

Связанная документация​

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

0
Loading