О dbt State
dbt State помогает dbt точнее определять, что нужно строить. Вместо того чтобы перестраивать каждый узел при каждом запуске, dbt повторно использует узлы: клонирует их из другого расположения или пропускает перестроение, если логика и данные не изменились.
С dbt State при каждом запуске dbt сначала сравнивает логику и данные каждого узла с предыдущими построениями в разных средах — независимо от того, выполняется ли оркестрация в dbt platform, через ваш собственный оркестратор или в среде разработки. Если логика совпадает, а данные всё ещё актуальны, dbt повторно использует существующий объект. Вместо нового построения dbt либо клонирует существующий узел из другого расположения, либо пропускает выполнение уже существующей модели. Кроме того, dbt автоматически использует состояние производственной среды для разрешения ссылок, не требуя вручную задавать флаги --defer или --state.
dbt State может повторно использовать все типы узлов, которые создают объекты отношений в базе данных (например, SQL-модели, снимки и seeds), а также тесты данных. Обратите внимание, что следующие модели не подходят для повторного использования:
- Python-модели: dbt State строит Python-модели при каждом запуске, даже если их код и данные вышестоящих узлов не изменились.
- Модели с пользовательскими материализациями: dbt State строит эти модели при каждом запуске, поскольку пользовательские материализации могут иметь побочные эффекты (например, изменять свойства таблиц или записывать данные в другие схемы), и dbt State не может достоверно определить, даст ли пропуск выполнения тот же результат.
dbt State работает с dbt (v1 и v2) и dbt platform во всех средах и с любыми оркестраторами, обеспечивая гибкий подход независимо от способа запуска dbt. Для работы требуется аутентификация через учётную запись dbt platform. Сведения о ценах см. в разделе Использование и стоимость dbt State.
Преимущества
dbt State снижает затраты на вычисления в хранилище данных и упрощает разработку, оркестрацию и выполнение dbt:
- Более актуальные данные при меньших затратах: узлы перестраиваются только тогда, когда результат будет отличаться (при появлении новых данных или изменениях кода), что сокращает вычисления в хранилище и поддерживает актуальность данных в производственной среде.
- Более быстрая и простая разработка: без dbt State при разработке в новой схеме необходимо строить вышестоящие зависимости, поддерживать копии для разработки или настраивать
--deferс манифестом состояния. С dbt State ничего из этого не требуется: dbt находит наиболее актуальное доступное состояние во всех средах, клонирует актуальные вышестоящие объекты данных и перестраивает только то, что изменилось. - Более простая оркестрация: решения об оркестрации обычно принимаются на уровне заданий — какие узлы входят в задание и как часто оно должно выполняться. dbt State добавляет принятие решений на уровне узлов в рамках каждого запуска: вместо перестроения всех выбранных узлов dbt оценивает каждый из них отдельно и решает, следует ли его перестроить, клонировать или пропустить, исходя из его логики и актуальности данных. В отличие от стандартного механизма отложенного разрешения ссылок, который всегда строит выбранные узлы и использует внешнее состояние только для ссылок на невыбранные вышестоящие узлы, dbt State также может пропускать или клонировать выбранные узлы.
- Порог актуальности на уровне модели: настройка
lag_toleranceопределяет, сколько времени dbt State ожидает перед перестроением узла после изменения данных в вышестоящих узлах. Узел перестраивается только в том случае, если с его последнего построения прошло больше времени, чем допускает заданный интервал, и данные вышестоящих узлов изменились. Это позволяет нижестоящим моделям не зависеть от частых изменений вышестоящих узлов и предотвращает дорогостоящие перестроения на неизменившихся данных, когда вышестоящая зависимость не выполняет соглашение об уровне обслуживания (SLA) в отношении актуальности.
Как работает dbt State
При выполнении команды, например dbt build --select +my_model, dbt State оценивает каждый выбранный узел и применяет наиболее эффективный из доступных подходов:
-
Повторное использование узла из той же схемы (пропуск) — dbt проверяет, существует ли объект в целевой схеме, не изменилась ли его логика и не наступило ли время перестроения согласно его настройке
lag_tolerance(либо с последнего построения ещё не истёк допустимый интервал, либо данные вышестоящих узлов не изменились). Если все условия выполнены, dbt полностью пропускает узел, как если бы он не был выбран. Для тестов данных, если проверяемые узлы не изменились с последнего запуска, повторно используется предыдущий результат теста без повторного выполнения тестового запроса.Если логика представления не изменилась, dbt State повторно использует его, даже если в вышестоящих узлах появились новые данные. Поскольку представления не хранят данные, новые данные вышестоящих узлов автоматически отражаются при запросе к представлению, даже без перестроения. Обратите внимание, что представления, использующие
select *для вышестоящего узла, могут вести себя иначе — подробнее см. в разделе Представления сselect *. -
Повторное использование узла из другой схемы (клонирование) — dbt State ищет во всех средах и заданиях подходящий объект с идентичной логикой и актуальными данными. В поиск включаются и схемы, в которых модель была построена до её первого запуска в производственной среде. Если найдено несколько кандидатов, dbt State клонирует объект с наиболее актуальными данными независимо от того, из какой среды он получен. Например, если в схеме CI данные актуальнее, чем в производственной среде, а логика идентична, dbt State клонирует объект оттуда. Узел помечается как Reused, а затраты на вычисления составляют лишь малую долю затрат на построение.
Если вы хотите запретить клонирование в определённую целевую конфигурацию (например, в средах с нормативными ограничениями), задайте для неё
allow_clones: falseвprofiles.ymlили в качестве расширенного атрибута в dbt platform. -
Обычное построение — если повторное использование невозможно, dbt строит узел обычным способом, автоматически используя внешнее состояние для разрешения ссылок на невыбранные вышестоящие узлы.
В начале каждого запуска dbt State в фоновом режиме получает метаданные таблиц (например, временные метки последнего изменения). Любой узел, для которого уже определено действие — пропуск, клонирование или выполнение, — сразу переходит к нему; узлы с ещё не определённым действием ожидают завершения получения метаданных.
Без dbt State каждый выбранный узел перестраивается при каждом запуске независимо от того, изменилось ли что-либо.
Чтобы после запуска узнать, какое решение dbt State принял для каждого узла и почему, выполните команду (Версии dbt: v2.0 и новее) dbt state explain. Если вы используете dbt platform, та же информация доступна без выполнения команды — перейдите на вкладку Explain на странице сведений о запуске задания, чтобы увидеть полный разбор решений для каждого узла.
Полный список доступных настроек см. в разделе Настройки dbt State.
Использование dbt State с селекторами state:* Бета-версия
В самостоятельно управляемых развёртываниях dbt State также можно использовать с селекторами state:*. Вместо сравнения с одним файлом manifest.json эти селекторы используют dbt State как источник для сравнения, причём состояние отслеживается для каждого узла отдельно. Подробнее см. в разделе Селекторы state:* на основе dbt State.
Регистрация для работы с dbt State
Для аутентификации dbt State требуется учётная запись dbt platform, даже если вы запускаете dbt локально или в неинтерактивной среде.
- Существующие пользователи dbt platform: ваши учётные данные dbt State совпадают с учётными данными платформы, а dbt State имеет доступ к вашим средам и заданиям на платформе.
- Новые пользователи dbt platform: создайте учётную запись на странице регистрации dbt platform. Пользователи dbt v2 и v1 могут начать процесс создания учётной записи из CLI, выполнив
dbt login(v1.13/v2) илиdbt run/dbt build(dbt v1.7–1.12). Эта команда откроет страницу регистрации, где можно создать бесплатную учётную запись.
Инструкции по настройке см. в разделе Настройка dbt State.
Отдельное приложение dbt State (app.state.dbt.com) больше не принимает новых пользователей. Если у вас уже есть учетная запись в приложении dbt State, создайте бесплатную учетную запись dbt platform, чтобы продолжить использовать dbt State — ваш бесплатный пробный период будет продлен при создании учетной записи.
Часто задаваемые вопросы
Связанная документация
- Настройка dbt State
- Мониторинг работы dbt State
- Настройка аутентификации для неинтерактивных сред
- Настройки dbt State
- Переход с оркестрации с учётом состояния
- Пробный период и оплата dbt State
- Использование и стоимость dbt State
