Разработка с использованием 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_cloud | dbt v2 и dbt platform управляют deferral для подключённого окружения. |
cloud_cli | dbt 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.
Добавьте или обновите запись проекта, заменив путь и целевое окружение своими значениями:
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 часа.
Настройте параметры обновления глобально, если вашему проекту нужны другие аргументы разбора или другое расположение снимка:
[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:
[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 = falsedbt использует объект, который вы уже создали в окружении разработки, и обращается к состоянию 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.
Прежде чем одобрить команду, убедитесь, что:
- Все новые или изменённые объекты создаются в целевом окружении разработки.
- Каталог состояния указывает на нужные артефакты production.
- Селектор ограничен ресурсами, необходимыми для задачи.
- Поведение
--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 для проекта. |
Связанная документация
- О deferral
- О dbt State
- Настройка dbt Wizard
- Как работает dbt Wizard
- Проверка изменений dbt с помощью dbt Wizard