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

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

Поддержка dbt v1.3 – v1.7 будет прекращена January 31, 2027

Версии dbt v1.3-v1.7 достигли конца жизненного цикла, и их поддержка будет прекращена January 31, 2027. После этой даты dbt Labs больше не будет поддерживать эти версии, и они будут удалены из dbt platform.

До этой даты переведите свои окружения на поддерживаемую версию dbt или канал выпусков, чтобы продолжать получать обновления и поддержку. Подробнее см. в руководстве Переход с устаревших версий dbt.

Ресурсы​

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

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

Изменение размера столбцов в 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.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, есть два основных варианта:

  1. Используйте dbt deps --upgrade везде, где ранее использовался dbt deps.
  2. Добавьте package-lock.yml в ваш файл .gitignore.

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

Улучшения 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 и больше не требует завершающего подчеркивания.

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

0
Loading