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

О состоянии в dbt

Одним из ключевых базовых предположений dbt является то, что его операции должны быть stateless и idempotent. Иными словами, не имеет значения, сколько раз модель уже запускалась ранее или запускалась ли она вообще. Неважно, выполните вы её один раз или тысячу раз. При одинаковых исходных данных вы можете ожидать одинаковый результат трансформации. Конкретный запуск dbt не должен «знать» о каких‑либо других запусках; ему достаточно знать код проекта и объекты в вашей базе данных в том виде, в котором они существуют прямо сейчас.

При этом dbt всё же хранит «состояние» (state) — детализированное представление ресурсов проекта (также называемых узлами), объектов базы данных и результатов выполнения в конкретный момент времени — в виде своих артефактов. При желании dbt может использовать эти артефакты для выполнения некоторых операций. Важно, что сами операции при этом остаются stateless и idempotent: при одинаковом manifest и одинаковых исходных данных dbt будет производить одинаковый результат трансформации.

dbt может использовать артефакты из предыдущего запуска, если путь к ним передан через флаг --state. Это является обязательным условием для следующих возможностей:

  • Селектор state, с помощью которого dbt может определять новые или изменённые ресурсы, сравнивая код текущего проекта с manifest состояния.
  • Deferring к другой среде, при котором dbt может определить вышестоящие, невыбранные ресурсы, отсутствующие в текущей среде, и вместо этого «отложить» ссылки на них, используя среду, указанную в manifest состояния.
  • Команда dbt clone, с помощью которой dbt может клонировать узлы на основе их расположения в manifest, переданном через флаг --state.

В совокупности селектор state и deferral позволяют реализовать подход "slim CI". Мы ожидаем, что в будущих релизах появятся дополнительные возможности, которые смогут использовать артефакты, передаваемые через флаг --state.

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

0
Loading