Обновление до версии v1.7
Ресурсы
Что нужно знать перед обновлением
dbt Labs стремится обеспечить обратную совместимость для всех версий 1.x, за исключением изменений, явно указанных ниже. Если вы столкнетесь с ошибкой при обновлении, пожалуйста, сообщите нам, создав задачу.
Изменения в поведении
dbt Core 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 Core v1.5 представил модельное управление (model governance), которое мы продолжаем дорабатывать. В 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и больше не требует завершающего подчеркивания.