О объекте model
model — это объект графа dbt (или узел) для текущей модели. Он может использоваться для:
- Доступа к настройкам
config, например, в post-hook - Доступа к пути модели
Например:
{% if model.config.materialized == 'view' %}
{{ log(model.name ~ " is a view.", info=True) }}
{% endif %}
Чтобы просмотреть содержимое model для данной модели:
- Интерфейс командной строки
- Studio IDE
Если вы используете интерфейс командной строки (CLI), используйте log() для вывода полного содержимого:
{{ log(model, info=True) }}
Если вы используете Studio IDE, скомпилируйте следующее, чтобы вывести всё содержимое целиком:
{{ model | tojson(indent = 4) }}
Свойства пакета для микропакетных моделей
Начиная с dbt Core v1.9, объект модели включает свойство batch (model.batch), которое предоставляет информацию о текущем пакете при выполнении инкрементальной микропакетной модели. Это свойство заполняется только во время выполнения пакета микропакетной модели.
Следующая таблица описывает свойства объекта batch. Обратите внимание, что dbt добавляет свойство к объектам model и batch.
| Loading table... |
Примечания по использованию
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:
| Loading table... |