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

Обновление до версии v1.8

Ресурсы​

Что нужно знать перед обновлением​

dbt Labs стремится обеспечивать обратную совместимость для всех версий 1.x, за исключением изменений, явно указанных на этой странице. Если при обновлении вы столкнётесь с ошибкой, сообщите нам об этом, создав issue.

Треки релизов​

dbt предоставляет функциональность новых версий dbt v1 через каналы выпуска с автоматическими обновлениями. Выберите канал выпуска в своих средах разработки, тестирования и промышленной эксплуатации, чтобы получить доступ ко всем возможностям dbt v1.8+ и не только. Чтобы обновить среду через Admin API dbt или Terraform, задайте для dbt_version строковое значение latest.

Новые и измененные функции и функциональность​

Новые функции и функциональность в dbt v1.8.

Изменение размера столбцов в Snowflake

Snowflake планирует увеличить размер столбцов по умолчанию для строковых и двоичных типов данных в сентябре 2026 года. После внедрения этого изменения в версиях dbt-snowflake ниже v1.10.6 могут возникать ошибки при построении некоторых инкрементальных моделей.

 Оценка влияния и необходимые действия

Если вы используете версию dbt-snowflake ниже v1.10.6 или ещё не перешли на канал выпуска в dbt platform, ваша версия адаптера несовместима с этим изменением. Это может приводить к ошибкам при построении инкрементальных моделей, которые соответствуют обоим следующим условиям:

  • Содержат строковые столбцы с заданными правилами сортировки (collation)
  • Используют настройку on_schema_change='sync_all_columns'

Чтобы проверить, затрагивает ли это изменение ваш проект, выполните следующую команду list:

dbt ls -s config.materialized:incremental,config.on_schema_change:sync_all_columns --resource-type model
  • Если команда возвращает No nodes selected!, никаких действий не требуется.

  • Если команда возвращает одну или несколько моделей (например, Found 1000 models, 644 macros), изменение может затронуть вас, если в этих моделях есть строковые столбцы без явно указанной длины. В этом случае обновитесь до версии, содержащей исправление:

    • dbt v1: dbt-snowflake v1.10.6 или более поздняя версия. Указания по обновлению приведены в разделе Обновление адаптеров инструкции по установке dbt v1.
    • dbt platform: любой канал выпуска (v1 Latest, v1 Compatible, v1 Extended или v1 Fallback).
    • dbt v2: v2.0.0.

    Это позволит вашим инкрементальным моделям корректно обрабатывать изменения схемы, сохраняя необходимые настройки правил сортировки.

Модульные тесты​

Исторически, тестовое покрытие 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 соответственно.

Вы можете прочитать больше о каждом из этих изменений поведения по следующим ссылкам:

Кратко о других изменениях​

  • Пользовательские значения по умолчанию для флагов глобальной конфигурации следует задавать в словаре flags в файле dbt_project.yml, а не в profiles.yml. Поддержка их настройки в profiles.yml объявлена устаревшей.
  • Новый флаг CLI --resource-type/--exclude-resource-type позволяет включать и исключать ресурсы при выполнении команд dbt build, run и clone.
  • Для повышения производительности dbt теперь выполняет один (пакетный) запрос при определении source freshness по метаданным вместо отдельного запроса для каждого источника.
  • Синтаксис DBT_ENV_SECRET_ изменён на DBT_ENV_SECRET: завершающее подчёркивание больше не требуется.
  • Флаг --select теперь корректно ограничивает содержимое catalog.json выбранными узлами во всех проектах независимо от их размера. В предыдущих версиях селекторы узлов игнорировались в проектах со 100 и более узлами, а при выборе более 100 узлов источники полностью исключались из catalog.json.

Нашли ошибку?

0
Loading