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

Доступно в v1

## Ресурсы

* [Журнал изменений](https://github.com/dbt-labs/dbt/blob/1.8.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)

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

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

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

dbt предоставляет функциональность новых версий dbt v1 через [каналы выпуска](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md) с автоматическими обновлениями. Выберите канал выпуска в своих [средах](https://docs.getdbt.tech/docs/deploy/deploy-environments.md) разработки, тестирования и промышленной эксплуатации, чтобы получить доступ ко всем возможностям dbt v1.8+ и не только. Чтобы обновить среду через [Admin API dbt](https://docs.getdbt.tech/docs/dbt-apis/admin-api.md) или [Terraform](https://registry.terraform.io/providers/dbt-labs/dbtcloud/latest), задайте для `dbt_version` строковое значение `latest`.

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

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

Изменение размера столбцов в 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 ограничивалось [“данными” тестами](https://docs.getdbt.tech/docs/build/data-tests.md), оценивающими качество входных данных или структуру результирующих наборов данных.

В версии v1.8 мы вводим нативную поддержку [модульного тестирования](https://docs.getdbt.tech/docs/build/unit-tests.md). Модульные тесты проверяют вашу SQL-логику моделирования на небольшом наборе статических входных данных **до** того, как вы материализуете вашу полную модель в производстве. Они поддерживают подход разработки, основанный на тестировании, улучшая как эффективность разработчиков, так и надежность кода.

Начиная с версии v1.8, когда вы выполняете команду `dbt test`, она будет запускать как модульные, так и данные тесты. Используйте метод [`test_type`](https://docs.getdbt.tech/reference/node-selection/methods.md#the-test_type), чтобы запускать только модульные или данные тесты:

```shell
dbt test --select "test_type:unit"           # запустить все модульные тесты
dbt test --select "test_type:data"           # запустить все данные тесты
```

Модульные тесты определяются в YML-файлах в вашем каталоге `models/` и в настоящее время поддерживаются только для SQL-моделей. Чтобы различать их, конфигурация `tests:` была переименована в `data_tests:`. Оба варианта в настоящее время поддерживаются для обратной совместимости.

#### Новый синтаксис `data_tests:`

Синтаксис `tests:` изменяется, чтобы отразить добавление модульных тестов. Начните миграцию вашего [теста данных](https://docs.getdbt.tech/docs/build/data-tests.md#new-data_tests-syntax) YML на использование `data_tests:` после обновления до версии v1.8, чтобы избежать проблем в будущем.

```yml
models:
  - name: orders
    columns:
      - name: order_id
        data_tests:
          - unique
          - not_null
```

#### Флаг `--empty`

Команды [`run`](https://docs.getdbt.tech/reference/commands/run.md#the-empty-flag) и [`build`](https://docs.getdbt.tech/reference/commands/build.md#the-empty-flag) теперь поддерживают флаг `--empty` для выполнения сухих прогонов только со схемой. Флаг `--empty` ограничивает ссылки и источники до нуля строк. dbt все равно выполнит SQL модели в целевом хранилище данных, но избежит дорогостоящих чтений входных данных. Это проверяет зависимости и гарантирует, что ваши модели будут правильно построены.

### dbt-core и адаптеры теперь независимы друг от друга

До версии v1.8 адаптеры dbt напрямую зависели от компонентов `dbt-core`, а `dbt-core` зависел от адаптера для выполнения операций. Эта двусторонняя зависимость затрудняла независимую разработку адаптеров. Начиная с dbt v1.8, [`dbt-core` и адаптеры больше не зависят друг от друга](https://github.com/dbt-labs/dbt-adapters/discussions/87), что упрощает их независимое сопровождение и развитие.

Для обратной совместимости пакеты адаптеров по-прежнему зависят от `dbt-core` при установке. Для запуска проекта dbt по-прежнему требуются и `dbt-core`, и адаптер, и начиная с версии v1.0 многие пользователи устанавливают их вместе с помощью [`pip install dbt-<adapter>`](<https://docs.getdbt.tech/docs/dbt-versions/dbt-upgrade/Older versions/upgrading-to-v1.0/.md#installation>).

Это поведение остается неизменным. Например, команда `pip install dbt-snowflake` устанавливает последние версии как `dbt-core`, так и `dbt-snowflake`.

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

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

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

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

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

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

### Управление изменениями в устаревших поведениях

В dbt v1.8 появились флаги для [управления изменениями устаревшего поведения](https://docs.getdbt.tech/reference/global-configs/behavior-changes.md). Вы можете включить недавно добавленные изменения (отключённые по умолчанию) или отключить устоявшиеся изменения (включённые по умолчанию), задав для соответствующих флагов в разделе `flags` файла `dbt_project.yml` значения `true` / `false` соответственно.

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

* (Стабильная функция, включена по умолчанию) [Требовать явного переопределения встроенных материализаций пакетами](https://docs.getdbt.tech/reference/global-configs/behavior-flags/require_explicit_package_overrides_for_builtin_materializations.md)
* (Новая функция, отключена по умолчанию) [Требовать имена ресурсов без пробелов](https://docs.getdbt.tech/reference/global-configs/behavior-flags/require_resource_names_without_spaces.md)
* (Новая функция, отключена по умолчанию) [Выполнять хуки проекта (`on-run-*`) в команде `dbt source freshness`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/source_freshness_run_project_hooks.md)

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

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