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

versions

Версии моделей, версии dbt_project.yml и версии .yml

Обратите внимание, что версии моделей отличаются от версий dbt_project.yml и версий файлов свойств .yml.

Версии моделей — это функция, которая позволяет улучшить управление и контроль моделей данных, позволяя отслеживать изменения и обновления моделей с течением времени. Версии dbt_project.yml относятся к совместимости проекта dbt с определенной версией dbt. Номера версий в файлах свойств .yml указывают, как dbt интерпретирует эти YAML файлы. Последние два являются полностью необязательными, начиная с dbt версии 1.5.

models/<schema>.yml
version: 2

models:
- name: model_name
versions:
- v: <version_identifier> # обязательно
defined_in: <file_name> # необязательно -- по умолчанию <model_name>_v<v>
columns:
# укажите все столбцы или включите/исключите столбцы из определения модели верхнего уровня в YAML
- include: <include_value>
exclude: <exclude_list>
# укажите дополнительные столбцы
- name: <column_name> # обязательно
- v: ...

# необязательно
latest_version: <version_identifier>

Стандартное соглашение для именования версий моделей — <model_name>_v<v>. Это касается файла, в котором dbt ожидает найти определение модели (SQL или Python), и псевдонима, который будет использоваться по умолчанию при материализации модели в базе данных.

v

Идентификатор версии для версии модели. Это значение может быть числовым (целым или с плавающей точкой) или любой строкой.

Значение идентификатора версии используется для упорядочивания версий модели относительно друг друга. Если версия модели не явно настраивает latest_version, то в качестве последней версии используется наибольший номер версии для разрешения вызовов ref к модели без аргумента version.

В общем, мы рекомендуем использовать простую схему "основного версионирования" для ваших моделей: 1, 2, 3 и так далее, где каждая версия отражает значительное изменение по сравнению с предыдущими версиями. Вы можете использовать и другие схемы версионирования. dbt будет сортировать ваши идентификаторы версий в алфавитном порядке, если значения не все числовые. Вы не должны включать букву v в идентификатор версии, так как dbt сделает это за вас.

Чтобы запустить модель с несколькими версиями, вы можете использовать --select флаг. Обратитесь к Версии моделей для получения дополнительной информации и синтаксиса.

defined_in

Имя файла модели (исключая расширение файла, например, .sql или .py), в котором определена версия модели.

Если defined_in не указано, dbt ищет определение версии модели в файле модели с именем <model_name>_v<v>. Последняя версия модели также может быть определена в файле с именем <model_name>, без суффикса версии. Имена файлов моделей должны быть уникальными в глобальном масштабе, даже при определении версионных реализаций модели с другим именем.

alias

Псевдоним по умолчанию для версии модели — <model_name>_v<v>. Логика для этого закодирована в макросе generate_alias_name.

Этот параметр по умолчанию можно изменить двумя способами:

  • Настройка пользовательского alias в yaml версии или в определении версии модели
  • Переопределение макроса generate_alias_name dbt, чтобы использовать другое поведение на основе node.version

См. "Пользовательские псевдонимы" для получения более подробной информации.

Обратите внимание, что значение defined_in и конфигурация alias модели не координируются, кроме как по соглашению. Они объявляются и определяются независимо.

Наши рекомендации

  • Следуйте согласованному соглашению об именовании версий моделей и псевдонимов.
  • Используйте defined_in и alias только если у вас есть веские причины.
  • Создайте представление, которое всегда указывает на последнюю версию вашей модели. Вы можете автоматизировать это для всех версионных моделей в вашем проекте с помощью хука on-run-end. Для получения более подробной информации прочитайте полную документацию по "Версии моделей".

Обнаружение значительных изменений

Когда вы используете метод выбора state:modified в Slim CI, dbt обнаружит изменения в контрактах версионных моделей и выдаст ошибку, если какие-либо из этих изменений могут быть значительными для потребителей ниже по потоку.

К критическим изменениям относятся:

  • Удаление существующего столбца
  • Изменение типа данных существующего столбца
  • Удаление или изменение одного из constraints на существующем столбце (dbt версии 1.6 или выше)
  • Изменение неконтрактных моделей без версий.
    • dbt также предупреждает, если у модели есть или был контракт, но она не имеет версии.
  Значительное изменение в неконтрактной модели для contracted_model (models/contracted_models/contracted_model.sql)
При сравнении с предыдущим состоянием проекта dbt обнаружил значительное изменение в неконтрактной модели.
- Принудительное соблюдение контракта было удалено: Ранее конфигурация этой модели включала contract: {enforced: true}. Теперь она больше не настроена на соблюдение своего контракта, и это значительное изменение.
- Столбцы были удалены:
- color
- date_day
- Принудительные ограничения на уровне столбцов были удалены:
- id (ConstraintType.not_null)
- id (ConstraintType.primary_key)
- Принудительные ограничения на уровне модели были удалены:
- ConstraintType.check -> ['id']
- Материализация изменилась с принудительными ограничениями:
- table -> view

Добавочные изменения не считаются значительными:

  • Добавление нового столбца в контрактную модель
  • Добавление новых constraints к существующему столбцу в контрактной модели
0