Состояние проекта в dbt Cloud
dbt Cloud предоставляет возможность развертывания dbt с сохранением состояния. Артефакты доступны программно через Discovery API на платформе метаданных.
С внедрением конечной точки environment
в Discovery API, мы ввели концепцию множественных состояний. Discovery API предоставляет единую конечную точку API, которая возвращает последнее состояние моделей, источников и других узлов в DAG.
Одна среда развертывания должна представлять производственное состояние данного проекта в dbt Cloud.
В dbt Cloud можно запросить два состояния:
-
Примененное состояние относится к тому, что существует в хранилище данных после успешного выполнения
dbt run
. Построение модели успешно завершено и теперь существует как таблица в хранилище. -
Состояние определения зависит от того, что существует в проекте, учитывая определенный в нем код (например, состояние манифеста), которое не обязательно было выполнено на платформе данных (возможно, это просто результат
dbt compile
).
Состояние определения (логическое) vs. примененное состояние узлов dbt
В проекте dbt состояние определения узла представляет конфигурацию, трансформации и зависимости, определенные в файлах SQL и YAML. Оно фиксирует, как узел должен обрабатываться в отношении других узлов и таблиц в хранилище данных и может быть создано с помощью dbt build
, run
, parse
или compile
. Оно изменяется всякий раз, когда изменяется код проекта.
Примененное состояние узла относится к фактическому состоянию узла после его успешного выполнения в DAG; например, модели выполняются, и их состояние применяется к хранилищу данных через dbt run
или dbt build
. Оно изменяется всякий раз, когда узел выполняется. Это состояние представляет результат трансформаций и фактические данные, хранящиеся в базе данных, которые для моделей могут быть таблицей или представлением на основе определенной логики.
Примене нное состояние включает информацию о выполнении, которая содержит метаданные о том, как узел достиг примененного состояния: последнее выполнение (успешное или попытка), например, когда оно началось, его статус и сколько времени оно заняло.
Вот как вы можете запросить и сравнить состояние определения и примененное состояние модели, используя Discovery API:
query Compare($environmentId: Int!, $first: Int!) {
environment(id: $environmentId) {
definition {
models(first: $first) {
edges {
node {
name
rawCode
}
}
}
}
applied {
models(first: $first) {
edges {
node {
name
rawCode
executionInfo {
executeCompletedAt
}
}
}
}
}
}
}
Большинство случаев использования Discovery API будут отдавать предпочтение примененному состоянию, так как оно относится к тому, что было фактически выполнено и может быть проанализировано.
Состояния, затронутые типом узла
Следующая таблица показывает состояния узлов dbt и как они затрагиваются Discovery API.
Узел | Выполнен в DAG | Создан при выполнении | Существует в базе данных | Родословная | Состояния |
---|---|---|---|---|---|
Анализ | Нет | Нет | Нет | Вверх по потоку | Определение |
Тест данных | Да | Да | Нет | Вверх по потоку | Примененное и определение |
Экспозиция | Нет | Нет | Нет | Вверх по потоку | Определение |
Группа | Нет | Нет | Нет | Вниз по потоку | Определение |
Макрос | Да | Нет | Нет | Н/Д | Определение |
Метрика | Нет | Нет | Нет | Вверх и вниз по потоку | Определение |
Модель | Да | Да | Да | Вверх и вниз по потоку | Примененное и определение |
Сохраненные запросы (не в API) | Н/Д | Н/Д | Н/Д | Н/Д | Н/Д |
Семя | Да | Да | Да | Вниз по потоку | Примененное и определение |
Семантическая модель | Нет | Нет | Нет | Вверх и вниз по потоку | Определение |
Снимок | Да | Да | Да | Вверх и вниз по потоку | Примененное и определение |
Источник | Да | Нет | Да | Вниз по потоку | Примененное и определение |
Юнит-тесты | Да | Да | Нет | Вниз по потоку | Определение |
Предостережения о обновлениях состоян ия/метаданных
Со временем Cloud Artifacts будет предоставлять информацию для поддержания состояния для функций/сервисов в dbt Cloud и позволит вам получить доступ к состоянию в dbt Cloud и его экосистеме. В настоящее время Cloud Artifacts сосредоточен на последнем производственном состоянии, но этот фокус будет развиваться.
Вот некоторые ограничения представления состояния в Discovery API:
- Пользователи должны получить доступ к среде по умолчанию, чтобы узнать последнее состояние проекта.
- API получает определение из последнего манифеста, сгенерированного в данной среде развертывания, но это часто не отражает последнее состояние кода проекта.
- Результаты компиляции кода могут быть устаревшими в зависимости от порядка выполнения шагов dbt Cloud и сбоев.
- Информация каталога может быть устаревшей или неполной (в примененном состоянии), в зависимости от того, когда в последний раз выполнялась команда
docs generate
. - Проверки свежести источников могут быть устаревшими (в примененном состоянии) в зависимости от того, когда команда выполнялась в последний раз, и они не включены в
build
.