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

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

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

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

0
Loading