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

Доступно в v1

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

Версии dbt v1.3-v1.7 достигли [конца жизненного цикла](https://docs.getdbt.tech/docs/dbt-versions.md#end-of-life-versions), и их поддержка будет прекращена January 31, 2027. После этой даты dbt Labs больше не будет поддерживать эти версии, и они будут удалены из dbt platform.

До этой даты переведите свои окружения на [поддерживаемую версию dbt](https://docs.getdbt.tech/docs/dbt-versions.md) или [канал выпусков](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md), чтобы продолжать получать обновления и поддержку. Подробнее см. в руководстве [Переход с устаревших версий dbt](https://docs.getdbt.tech/guides/migrate-off-legacy-dbt-versions.md?step=1).

## Ресурсы

* [Журнал изменений](https://github.com/dbt-labs/dbt/blob/1.7.latest/CHANGELOG.md)
* [Руководство по установке CLI dbt v1](https://docs.getdbt.tech/docs/local/install-dbt.md)
* [Руководство по обновлению Cloud](https://docs.getdbt.tech/docs/dbt-versions/upgrade-dbt-platform-version.md)
* [График выпусков](https://github.com/dbt-labs/dbt/issues/8260)

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

dbt Labs стремится обеспечивать обратную совместимость для всех версий 1.x, за исключением изменений, явно указанных ниже. Если при обновлении вы столкнётесь с ошибкой, сообщите нам об этом, [создав issue](https://github.com/dbt-labs/dbt/issues/new).

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

[Snowflake планирует увеличить](https://docs.snowflake.com/en/release-notes/bcr-bundles/un-bundled/bcr-2118) размер столбцов по умолчанию для строковых и двоичных типов данных в сентябре 2026 года. После внедрения этого изменения в версиях `dbt-snowflake` ниже v1.10.6 могут возникать ошибки при построении некоторых инкрементальных моделей.

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

Если вы используете версию `dbt-snowflake` ниже v1.10.6 или ещё не перешли на [канал выпуска](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md) в dbt platform, ваша версия адаптера несовместима с этим изменением. Это может приводить к ошибкам при построении инкрементальных моделей, которые соответствуют *обоим* следующим условиям:

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

Чтобы проверить, затрагивает ли это изменение ваш проект, выполните следующую команду [list](https://docs.getdbt.tech/reference/commands/list.md):

```bash
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 или более поздняя версия. Указания по обновлению приведены в разделе [Обновление адаптеров](https://docs.getdbt.tech/docs/local/install-dbt.md) инструкции по установке 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`](https://docs.getdbt.tech/reference/commands/deps.md) создает или обновляет файл `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`.

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

* [`dbt docs generate`](https://docs.getdbt.tech/reference/commands/cmd-docs.md) теперь поддерживает `--select` для генерации [метаданных каталога](https://docs.getdbt.tech/reference/artifacts/catalog-json.md) для выбранной части вашего проекта.
* Теперь данные об [актуальности источников](https://docs.getdbt.tech/docs/deploy/source-freshness.md) можно получать из таблиц метаданных хранилища данных.

### Улучшения MetricFlow

* Автоматическое создание метрик на основе мер с [`create_metric: true`](https://docs.getdbt.tech/docs/build/semantic-models.md).
* Необязательное поле [`label`](https://docs.getdbt.tech/docs/build/semantic-models.md) в `semantic_models`, `measures`, `dimensions` и `entities`.
* Новые конфигурации для семантических моделей — [enable/disable](https://docs.getdbt.tech/reference/resource-configs/enabled.md), [group](https://docs.getdbt.tech/reference/resource-configs/group.md) и [meta](https://docs.getdbt.tech/reference/resource-configs/meta.md).
* Поддержка `fill_nulls_with` и `join_to_timespine` для узлов метрик.
* `saved_queries` расширяет управление и контроль (governance) за пределы семантических объектов, включая их использование.

### Для потребителей артефактов dbt (метаданные)

* Версия схемы [manifest](https://docs.getdbt.tech/reference/artifacts/manifest-json.md) обновлена до v11.

* Версия схемы [run\_results](https://docs.getdbt.tech/reference/artifacts/run-results-json.md) обновлена до v5.

* Есть несколько конкретных изменений в [catalog.json](https://docs.getdbt.tech/reference/artifacts/catalog-json.md):

  * Добавлены [атрибуты узлов](https://docs.getdbt.tech/reference/artifacts/run-results-json.md), связанные с компиляцией (`compiled`, `compiled_code`, `relation_name`) в `catalog.json`.
  * Словарь узлов в `catalog.json` теперь может быть "частичным", если `dbt docs generate` выполняется с селектором.

### Управление моделями

В dbt v1.5 появились возможности управления моделями, которые мы продолжаем совершенствовать. В v1.7 добавлены следующие возможности и функции:

* **[Обнаружение критических изменений](https://docs.getdbt.tech/reference/resource-properties/versions.md#detecting-breaking-changes) для моделей с включёнными контрактами:** Когда dbt обнаруживает критическое изменение модели с принудительно применяемым контрактом во время сравнения состояния (state comparison), он теперь будет выбрасывать ошибку для версионированных моделей и предупреждение — для моделей без версий.
* **[Задание `access` как конфига](https://docs.getdbt.tech/reference/resource-configs/access.md):** Теперь вы можете задавать `access` модели внутри config-блоков в SQL-файле модели или в YAML-файле проекта (`dbt_project.yml`) сразу для всей подпапки.
* **[Алиасы типов для контрактов моделей](https://docs.getdbt.tech/reference/resource-configs/contract.md):** dbt будет использовать встроенные в адаптер алиасы типов данных для типов, указанных пользователем. Это означает, что теперь можно всегда писать `string`, а dbt автоматически преобразует его, например, в `text` для Postgres/Redshift. Эта функциональность включена по умолчанию, но при необходимости её можно отключить.
* **[Предупреждение для числовых типов](https://docs.getdbt.tech/reference/resource-configs/contract.md):** Из‑за проблем, возникающих при использовании `numeric` в контрактах моделей без учёта того, что значения по умолчанию (например, `numeric(38,0)`) могут округлять дробные числа, dbt теперь будет выдавать предупреждение, если обнаружит числовой тип без явно заданной precision/scale.

### dbt clean

Команда [dbt clean](https://docs.getdbt.tech/reference/commands/clean.md) очищает только пути внутри текущей рабочей директории. Флаг `--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`: Полностью квалифицированное имя объекта, который был (или будет) создан/обновлен в базе данных.

### Устаревшая функциональность

Возможность для установленных пакетов переопределять встроенные материализации без явного согласия пользователя устаревает.

* Переопределение встроенной материализации из установленного пакета вызывает предупреждение об устаревании.

* Использование пользовательской материализации из установленного пакета не вызывает предупреждение об устаревании.

* Использование переопределения встроенной материализации из корневого проекта через оберточную материализацию все еще поддерживается. Например:

  ```text
  {% materialization view, default %}
  {{ return(my_cool_package.materialization_view_default()) }}
  {% endmaterialization %}
  ```

### Быстрые изменения

С этими быстрыми изменениями вы теперь можете:

* Настроить [`delimiter`](https://docs.getdbt.tech/reference/resource-configs/delimiter.md) для файла seed.
* Использовать пакеты с тем же git-репозиторием и уникальной поддиректорией.
* Получить доступ к макросу `date_spine` напрямую из dbt-core (перемещен из dbt-utils).
* Синтаксис для `DBT_ENV_SECRET_` изменен на `DBT_ENV_SECRET` и больше не требует завершающего подчеркивания.
