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

О объекте model

model — это объект графа dbt (или узел) для текущей модели. Он может использоваться для:

  • Доступа к настройкам config, например, в post-hook
  • Доступа к пути модели

Например:

{% if model.config.materialized == 'view' %}
{{ log(model.name ~ " is a view.", info=True) }}
{% endif %}

Чтобы просмотреть содержимое model для данной модели:

Если вы используете интерфейс командной строки (CLI), используйте log() для вывода полного содержимого:

{{ log(model, info=True) }}

Свойства пакета для микропакетных моделей

Начиная с 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.8v12
v1.7v11
v1.6v10
v1.5v9
v1.4v8
v1.3v7
v1.2v6
v1.1v5
v1.0v4

Связанные документы

0