Обновление до версии v1.7
Версии dbt v1.3-v1.7 достигли конца жизненного цикла, и их поддержка будет прекращена January 31, 2027. После этой даты dbt Labs больше не будет поддерживать эти версии, и они будут удалены из dbt platform.
До этой даты переведите свои окружения на поддерживаемую версию dbt или канал выпусков, чтобы продолжать получать обновления и поддержку. Подробнее см. в руководстве Переход с устаревших версий dbt.
Ресурсы
- Журнал изменений
- Руководство по установке CLI dbt v1
- Руководство по обновлению Cloud
- График выпусков
Что нужно знать перед обновлением
dbt Labs стремится обеспечивать обратную совместимость для всех версий 1.x, за исключением изменений, явно указанных ниже. Если при обновлении вы столкнётесь с ошибкой, сообщите нам об этом, создав issue.
Snowflake планирует увеличить размер столбцов по умолчанию для строковых и двоичных типов данных в сентябре 2026 года. После внедрения этого изменения в версиях dbt-snowflake ниже v1.10.6 могут возникать ошибки при построении некоторых инкрементальных моделей.
Изменения в поведении
dbt v1.7 расширяет набор источников, для которых можно настроить проверку свежести данных. Ранее проверка свежести была доступна только для источников с полем loaded_at_field; теперь для неё можно использовать таблицы метаданных хранилища, если они доступны.
В рамках этого изменения loaded_at_field больше не требуется для генерации свежести источника. Если у источника есть блок freshness:, dbt попытается вычислить свежесть для этого источника:
- Если
loaded_at_fieldпредоставлен, dbt вычислит свежесть через запрос select (предыдущее поведение). - Если
loaded_at_fieldне предоставлен, dbt вычислит свежесть через таблицы метаданных хранилища, когда это возможно (новое поведение).
Это относительно небольшое изменение в поведении, но о нём стоит упомянуть на случай, если вы заметите, что dbt рассчитывает freshness для большего количества источников, чем раньше. Чтобы исключить источник из расчётов freshness, явно укажите freshness: null.
Начиная с версии v1.7, выполнение dbt deps создает или обновляет файл package-lock.yml в project_root, где записан packages.yml. Файл package-lock.yml содержит запись обо всех установленных пакетах, и если последующие запуски dbt deps не содержат обновленных пакетов в dependencies.yml или packages.yml, dbt-core устанавливает из package-lock.yml.
Чтобы сохранить поведение до v1.7, есть два основных варианта:
- Используйте
dbt deps --upgradeвезде, где ранее использовалсяdbt deps. - Добавьте
package-lock.ymlв ваш файл.gitignore.
Новые и измененные функции и функциональность
dbt docs generateтеперь поддерживает--selectдля генерации метаданных каталога для выбранной части вашего проекта.- Теперь данные об актуальности источников можно получать из таблиц метаданных хранилища данных.
Улучшения MetricFlow
- Автоматическое создание метрик на основе мер с
create_metric: true. - Необязательное поле
labelвsemantic_models,measures,dimensionsиentities. - Новые конфигурации для семантических моделей — enable/disable, group и meta.
- Поддержка
fill_nulls_withиjoin_to_timespineдля узлов метрик. saved_queriesрасширяет управление и контроль (governance) за пределы семантических объектов, включая их использование.
Для потребителей артефактов dbt (метаданные)
- Версия схемы manifest обновлена до v11.
- Версия схемы run_results обновлена до v5.
- Есть несколько конкретных изменений в catalog.json:
- Добавлены атрибуты узлов, связанные с компиляцией (
compiled,compiled_code,relation_name) вcatalog.json. - Словарь узлов в
catalog.jsonтеперь может быть "частичным", еслиdbt docs generateвыполняется с селектором.
- Добавлены атрибуты узлов, связанные с компиляцией (
Управление моделями
В dbt v1.5 появились возможности управления моделями, которые мы продолжаем совершенствовать. В v1.7 добавлены следующие возможности и функции:
- Обнаружение критических изменений для моделей с включёнными контрактами: Когда dbt обнаруживает критическое изменение модели с принудительно применяемым контрактом во время сравнения состояния (state comparison), он теперь будет выбрасывать ошибку для версионированных моделей и предупреждение — для моделей без версий.
- Задание
accessкак конфига: Теперь вы можете задаватьaccessмодели внутри config-блоков в SQL-файле модели или в YAML-файле проекта (dbt_project.yml) сразу для всей подпапки. - Алиасы типов для контрактов моделей: dbt будет использовать встроенные в адаптер алиасы типов данных для типов, указанных пользователем. Это означает, что теперь можно всегда писать
string, а dbt автоматически преобразует его, например, вtextдля Postgres/Redshift. Эта функциональность включена по умолчанию, но при необходимости её можно отключить. - Предупреждение для числовых типов: Из‑за проблем, возникающих при использовании
numericв контрактах моделей без учёта того, что значения по умолчанию (например,numeric(38,0)) могут округлять дробные числа, dbt теперь будет выдавать предупреждение, если обнаружит числовой тип без явно заданной precision/scale.
dbt clean
Команда dbt clean очищает только пути внутри текущей рабочей директории. Флаг --no-clean-project-files-only удалит все пути, указанные в разделе clean-targets файла dbt_project.yml, даже если они находятся за пределами проекта dbt.
Поддерживаемые флаги:
--clean-project-files-only(по умолчанию)--no-clean-project-files-only
Дополнительные атрибуты в run_results.json
Теперь run_results.json включает три атрибута, связанные с состоянием applied, которые дополняют unique_id:
compiled: Логическая запись статуса компиляции узла (Falseпосле разбора, ноTrueпосле компиляции).compiled_code: Отображаемая строка кода, который был скомпилирован (пустая после разбора, но полная строка после компиляции).relation_name: Полностью квалифицированное имя объекта, который был (или будет) создан/обновлен в базе данных.
Устаревшая функциональность
Возможность для установленных пакетов переопределять встроенные материализации без явного согласия пользователя устаревает.
-
Переопределение встроенной материализации из установленного пакета вызывает предупреждение об устаревании.
-
Использование пользовательской материализации из установленного пакета не вызывает предупреждение об устаревании.
-
Использование переопределения встроенной материализации из корневого проекта через оберточную материализацию все еще поддерживается. Например:
{% materialization view, default %}
{{ return(my_cool_package.materialization_view_default()) }}
{% endmaterialization %}
Быстрые изменения
С этими быстрыми изменениями вы теперь можете:
- Настроить
delimiterдля файла seed. - Использовать пакеты с тем же git-репозиторием и уникальной поддиректорией.
- Получить доступ к макросу
date_spineнапрямую из dbt-core (перемещен из dbt-utils). - Синтаксис для
DBT_ENV_SECRET_изменен наDBT_ENV_SECRETи больше не требует завершающего подчеркивания.