Обновление до версии v1.8
Ресурсы
Что нужно знать перед обновлением
dbt Labs стремится обеспечивать обратную совместимость для всех версий 1.x, за исключением изменений, явно указанных на этой странице. Если при обновлении вы столкнётесь с ошибкой, сообщите нам об этом, создав issue.
Треки релизов
dbt предоставляет функциональность новых версий dbt v1 через каналы выпуска с автоматическими обновлениями. Выберите канал выпуска в своих средах разработки, тестирования и промышленной эксплуатации, чтобы получить доступ ко всем возможностям dbt v1.8+ и не только. Чтобы обновить среду через Admin API dbt или Terraform, задайте для dbt_version строковое значение latest.
Новые и измененные функции и функциональность
Новые функции и функциональность в dbt v1.8.
Snowflake планирует увеличить размер столбцов по умолчанию для строковых и двоичных типов данных в сентябре 2026 года. После внедрения этого изменения в версиях dbt-snowflake ниже v1.10.6 могут возникать ошибки при построении некоторых инкрементальных моделей.
Модульные тесты
Исторически, тестовое покрытие dbt ограничивалось “данными” тестами, оценивающими качество входных данных или структуру результирующих наборов данных.
В версии v1.8 мы вводим нативную поддержку модульного тестирования. Модульные тесты проверяют вашу SQL-логику моделирования на небольшом наборе статических входных данных до того, как вы материализуете вашу полную модель в производстве. Они поддерживают подход разработки, основанный на тестировании, улучшая как эффективность разработчиков, так и надежность кода.
Начиная с версии v1.8, когда вы выполняете команду dbt test, она будет запускать как модульные, так и данные тесты. Используйте метод test_type, чтобы запускать только модульные или данные тесты:
dbt test --select "test_type:unit" # запустить все модульные тесты
dbt test --select "test_type:data" # запустить все данные тесты
Модульные тесты определяются в YML-файлах в вашем каталоге models/ и в настоящее время поддерживаются только для SQL-моделей. Чтобы различать их, конфигурация tests: была переименована в data_tests:. Оба варианта в настоящее время поддерживаются для обратной совместимости.
Новый синтаксис data_tests:
Синтаксис tests: изменяется, чтобы отразить добавление модульных тестов. Начните миграцию вашего теста данных YML на использование data_tests: после обновления до версии v1.8, чтобы избежать проблем в будущем.
models:
- name: orders
columns:
- name: order_id
data_tests:
- unique
- not_null
Флаг --empty
Команды run и build теперь поддерживают флаг --empty для выполнения сухих прогонов только со схемой. Флаг --empty ограничивает ссылки и источники до нуля строк. dbt все равно выполнит SQL модели в целевом хранилище данных, но избежит дорогостоящих чтений входных данных. Это проверяет зависимости и гарантирует, что ваши модели будут правильно построены.
dbt-core и адаптеры теперь независимы друг от друга
До версии v1.8 адаптеры dbt напрямую зависели от компонентов dbt-core, а dbt-core зависел от адаптера для выполнения операций. Эта двусторонняя зависимость затрудняла независимую разработку адаптеров. Начиная с dbt v1.8, dbt-core и адаптеры больше не зависят друг от друга, что упрощает их независимое сопровождение и развитие.
Для обратной совместимости пакеты адаптеров по-прежнему зависят от dbt-core при установке. Для запуска проекта dbt по-прежнему требуются и dbt-core, и адаптер, и начиная с версии v1.0 многие пользователи устанавливают их вместе с помощью pip install dbt-<adapter>.
Это поведение остается неизменным. Например, команда pip install dbt-snowflake устанавливает последние версии как dbt-core, так и dbt-snowflake.
Устаревшая функциональность
Возможность для установленных пакетов переопределять встроенные материализации без явного согласия пользователя устаревает.
-
Переопределение встроенной материализации из установленного пакета вызывает предупреждение об устаревании.
-
Использование пользовательской материализации из установленного пакета не вызывает предупреждения об устаревании.
-
Использование переопределения встроенной материализации из корневого проекта через оберточную материализацию все еще поддерживается. Например:
{% materialization view, default %}
{{ return(my_cool_package.materialization_view_default()) }}
{% endmaterialization %}
Управление изменениями в устаревших поведениях
В dbt v1.8 появились флаги для управления изменениями устаревшего поведения. Вы можете включить недавно добавленные изменения (отключённые по умолчанию) или отключить устоявшиеся изменения (включённые по умолчанию), задав для соответствующих флагов в разделе flags файла dbt_project.yml значения true / false соответственно.
Вы можете прочитать больше о каждом из этих изменений поведения по следующим ссылкам:
- (Стабильная функция, включена по умолчанию) Требовать явного переопределения встроенных материализаций пакетами
- (Новая функция, отключена по умолчанию) Требовать имена ресурсов без пробелов
- (Новая функция, отключена по умолчанию) Выполнять хуки проекта (
on-run-*) в командеdbt source freshness
Кратко о других изменениях
- Пользовательские значения по умолчанию для флагов глобальной конфигурации следует задавать в словаре
flagsв файлеdbt_project.yml, а не вprofiles.yml. Поддержка их настройки вprofiles.ymlобъявлена устаревшей. - Новый флаг CLI
--resource-type/--exclude-resource-typeпозволяет включать и исключать ресурсы при выполнении команд dbtbuild,runиclone. - Для повышения производительности dbt теперь выполняет один (пакетный) запрос при определении
source freshnessпо метаданным вместо отдельного запроса для каждого источника. - Синтаксис
DBT_ENV_SECRET_изменён наDBT_ENV_SECRET: завершающее подчёркивание больше не требуется. - Флаг
--selectтеперь корректно ограничивает содержимоеcatalog.jsonвыбранными узлами во всех проектах независимо от их размера. В предыдущих версиях селекторы узлов игнорировались в проектах со 100 и более узлами, а при выборе более 100 узлов источники полностью исключались изcatalog.json.