Настройки dbt State
Когда вы выполняете команду dbt с включённым dbt State, dbt сравнивает логику и данные узла с предыдущими сборками и выбирает наиболее эффективный вариант:
- Повторное использование — если объект существует в целевой схеме, его логика не изменилась и время для повторной сборки в соответствии с
lag_toleranceещё не наступило (последняя сборка всё ещё находится в пределах допустимого интервала или данные вышестоящих узлов не изменились), узел используется повторно. - Клонирование — если повторное использование невозможно, но объект существует в окружении, используемом для отложенного разрешения ссылок (deferral), с той же логикой и достаточно свежими данными, dbt State клонирует его.
- Обычная сборка — если ни повторное использование, ни клонирование невозможны, узел собирается как обычно, с использованием deferral для всех невыбранных вышестоящих узлов.
Используйте следующие настройки, чтобы управлять тем, как dbt State принимает эти решения.
- YAML-файл проекта
- YAML-файл свойств
- Настройка в SQL-файле
dbt_project.yml
models:
+state:
lag_tolerance: <duration>
compare_unrendered_code: true | false
require_fresh_data_from: any | all
evaluate_volatile_sql: true | false
pre_clone: never | if_missing | always
execute_hooks_on_any_reuse: true | false
models/schema.yml
models:
- name: <model_name>
config:
state:
lag_tolerance: <duration>
compare_unrendered_code: true | false
require_fresh_data_from: any | all
evaluate_volatile_sql: true | false
pre_clone: never | if_missing | always
execute_hooks_on_any_reuse: true | false
models/<filename>.sql
{{ config(
state={
"lag_tolerance": "<duration>",
"compare_unrendered_code": true | false,
"require_fresh_data_from": "any" | "all",
"evaluate_volatile_sql": true | false,
"pre_clone": "never" | "if_missing" | "always",
"execute_hooks_on_any_reuse": true | false
}
) }}
Параметры уровня профиля задаются в profiles.yml и применяются к определённому целевому окружению:
profiles.yml
my_project:
outputs:
dev:
type: snowflake
# ... настройки подключения к dev
defer_to_target: prod # только для самостоятельно управляемых окружений
prod:
type: snowflake
# ... настройки подключения к prod
allow_clones: true | false
metadata_warehouse: <warehouse_name> # только для Snowflake
target: dev
| Настройка | По умолчанию | Область действия | Описание |
|---|---|---|---|
lag_tolerance | 45m | Уровень узла, папки или проекта через конфигурацию модели | Задаёт время ожидания dbt State перед повторной сборкой узла после изменения данных вышестоящих узлов. Узел пересобирается только тогда, когда с момента его последней сборки прошло больше указанного времени и данные вышестоящих узлов изменились. Этот интервал служит буфером для экономии вычислительных ресурсов и помогает согласовать сборки с SLA по свежести данных. Применяется только к свежести данных; изменения SQL всегда вызывают повторную сборку независимо от этой настройки. |
compare_unrendered_code | false | Уровень узла, папки или проекта через конфигурацию модели | Определяет, проверяет ли dbt State при обнаружении изменений кода как шаблон Jinja (код до рендеринга), так и SQL после рендеринга. Полезно для моделей с недетерминированными макросами или переменными окружения, из-за которых при каждом запуске получается разный SQL после рендеринга. |
require_fresh_data_from | any | Уровень узла, папки или проекта через конфигурацию модели | Определяет, должны ли свежие данные появиться у любого (any) или у всех (all) непосредственных родительских узлов, прежде чем узел сможет быть пересобран. |
pre_clone | if_missing | Уровень узла, папки или проекта через конфигурацию модели | Определяет, заполняет ли dbt State инкрементальные модели и снимки перед запуском, клонируя объекты из производственного окружения. |
execute_hooks_on_any_reuse | false | Уровень узла, папки или проекта через конфигурацию модели | Определяет, выполняются ли хуки pre-hook и post-hook, когда узел используется повторно без пересборки. |
evaluate_volatile_sql | false | Уровень узла, папки или проекта через конфигурацию модели | Определяет, сохраняет и сравнивает ли dbt State результаты выполнения волатильных SQL-функций при принятии решения о повторной сборке. |
defer_to_target | prod | Профиль | (Только для самостоятельно управляемых окружений) Указывает целевое окружение профиля, которое dbt State использует для deferral. |
allow_clones | true | Профиль | Определяет, может ли dbt State клонировать таблицы в целевое окружение. Например, установите false для prod, чтобы запретить dbt State клонировать таблицы из dev в производственное окружение. |
metadata_warehouse | warehouse из профиля | Профиль | (Только для Snowflake) Отдельный вычислительный склад для запросов метаданных dbt State. Если он задан, dbt выполняет несколько отдельных запросов (по одному на схему) вместо одного объединённого запроса. |
Связанная документация
Нашли ошибку?
0