О объекте model
model
— это объект графа dbt (или узел) для текущей модели. Он может использоваться для:
- Доступа к настройкам
config
, например, в post-hook - Доступа к пути модели
Например:
{% if model.config.materialized == 'view' %}
{{ log(model.name ~ " is a view.", info=True) }}
{% endif %}
Чтобы просмотреть содержимое model
для данной модели:
- Интерфейс командной строки
- dbt Cloud IDE
Если вы используете интерфейс командной строки (CLI), используйте log() для вывода полного содержимого:
{{ log(model, info=True) }}
Если вы используете dbt Cloud IDE, скомпилируйте следующее, чтобы выве сти полное содержимое:
{{ model | tojson(indent = 4) }}
Свойства пакета для микропакетных моделей
Начиная с dbt Core v1.9, объект модели включает свойство batch
(model.batch
), которое предоставляет информацию о текущем пакете при выполнени и инкрементальной микропакетной модели. Это свойство заполняется только во время выполнения пакета микропакетной модели.
Следующая таблица описывает свойства объекта batch
. Обратите внимание, что dbt добавляет свойство к объектам model
и batch
.
Свойство | Описание | Пример |
---|---|---|
id | Уникальный идентификатор пакета в контексте микропакетной модели. | model.batch.id |
event_time_start | Время начала фильтра event_time пакета (включительно). | model.batch.event_time_start |
event_time_end | Время окончания фильтра event_time пакета (исключительно). | model.batch.event_time_end |
Примечания по использованию
model.batch
доступен только во время выполнения пакета микропакетной модели. Вне выполнения микропакета model.batch
р авен None
, и его под-свойства недоступны.
Пример безопасного доступа к свойствам пакета
Мы рекомендуем всегда проверять, заполнен ли model.batch
, прежде чем обращаться к его свойствам. Для этого используйте оператор if
для безопасного доступа к свойствам batch
:
{% if model.batch %}
{{ log(model.batch.id) }} # Логирование ID пакета #
{{ log(model.batch.event_time_start) }} # Логирование времени начала пакета #
{{ log(model.batch.event_time_end) }} # Логирование времени о кончания пакета #
{% endif %}
В этом примере оператор if model.batch
гарантирует, что код выполняется только во время выполнения пакета. log()
используется для вывода свойств batch
для отладки.
Пример логирования деталей пакета
Это практический пример того, как вы можете использовать model.batch
в микропакетной модели для логирования деталей пакета для batch.id
:
{% if model.batch %}
{{ log("Processing batch with ID: " ~ model.batch.id, info=True) }}
{{ log("Batch event time range: " ~ model.batch.event_time_start ~ " to " ~ model.batch.event_time_end, info=True) }}
{% endif %}
В этом примере оператор if model.batch
гарантирует, что код выполняется только во время выполнения пакета. log()
используется для вывода свойств batch
для отладки.
Структура модели и JSON-схема
Чтобы просмотреть структуру models
и их определения:
- Обратитесь к JSON-схеме dbt для описания и использования артефактов, сгенерированных dbt
- Выберите соответствующую версию манифеста в разделе Manifest. Например, если вы используете dbt v1.8, выберите Manifest v12
- Номер версии
manifest.json
связан с (но не равен) вашей версии dbt, поэтому вы должны использовать правильную версиюmanifest.json
для вашей версии dbt. Чтобы найти правильную версиюmanifest.json
, обратитесь к Manifest и выберите версию dbt в верхней навигации (например,v1.5
). Это поможет вам узнать, какие теги связаны с вашей моделью.
- Номер версии
- Затем перейдите к
nodes
--> Выберите Дополнительные свойства -->CompiledModelNode
или просмотрите другие определения/объекты.
Используйте следующую таблицу, чтобы понять, как работает паттерн версионирования и сопоставить версию Manifest с версией dbt:
Версия dbt Core | Версия манифеста |
---|---|
v1.8 | v12 |
v1.7 | v11 |
v1.6 | v10 |
v1.5 | v9 |
v1.4 | v8 |
v1.3 | v7 |
v1.2 | v6 |
v1.1 | v5 |
v1.0 | v4 |