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

Доступно в v1

* [Список изменений dbt 1.9](https://github.com/dbt-labs/dbt/blob/1.9.latest/CHANGELOG.md)

* [Руководство по установке CLI dbt v1](https://docs.getdbt.tech/docs/local/install-dbt.md)

* [Руководство по обновлению платформы dbt](https://docs.getdbt.tech/docs/dbt-versions/upgrade-dbt-platform-version.md)

* [Журнал изменений dbt Core 1.9](https://github.com/dbt-labs/dbt-core/blob/1.9.latest/CHANGELOG.md)

* [Руководство по установке dbt Core CLI](https://docs.getdbt.tech/docs/local/install-dbt.md)

* [Руководство по обновлению в облаке](https://docs.getdbt.tech/docs/dbt-versions/upgrade-dbt-platform-version.md#release-tracks)

dbt Labs стремится обеспечивать обратную совместимость для всех версий 1.x. Любые изменения поведения будут сопровождаться [флагом изменения поведения](https://docs.getdbt.tech/reference/global-configs/behavior-changes.md#behavior-change-flags), чтобы предоставить время для миграции существующих проектов. Если после обновления вы столкнётесь с ошибкой, сообщите нам об этом, [создав issue](https://github.com/dbt-labs/dbt/issues/new).

dbt предоставляет функциональность новых версий dbt v1 через [каналы выпуска](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md) с автоматическими обновлениями. Если вы выбрали канал выпуска **v1 Latest** в dbt, у вас уже есть доступ ко всем возможностям, исправлениям и другой функциональности, включённым в dbt v1.9! Если вы выбрали канал выпуска **v1 Compatible**, вы получите доступ к ним в следующем ежемесячном выпуске **v1 Compatible** после выхода финальной версии dbt v1.9.

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

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

### `incremental_strategy` с микропакетами

к сведению

Если вы используете пользовательский макрос microbatch, установите флаг поведения [`require_batched_execution_for_custom_microbatch_strategy`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/require_batched_execution_for_custom_microbatch_strategy.md) в файле `dbt_project.yml`, чтобы включить пакетное выполнение. Если у вас нет пользовательского макроса microbatch, устанавливать этот флаг не нужно: dbt автоматически выполнит обработку микропакетами для любой модели, использующей стратегию microbatch.

Инкрементальные модели всегда были *оптимизацией производительности* — для наборов данных, которые слишком велики, чтобы их можно было удалять и воссоздавать с нуля каждый раз, когда вы выполняете `dbt run`. Узнайте больше об [инкрементальных моделях](https://docs.getdbt.tech/docs/build/incremental-models-overview.md).

Исторически управление инкрементальными моделями включало несколько ручных шагов и обязанностей, включая:

* Добавление фрагмента кода dbt (в блоке `is_incremental()`), который использует уже существующую таблицу (`this`) в качестве грубой закладки, чтобы обрабатывать только новые данные.
* Выбор одной из стратегий для объединения старых и новых данных (`append`, `delete+insert` или `merge`).
* Если что-то идет не так или ваша схема изменяется, вы всегда можете выполнить "полное обновление", запустив тот же простой запрос, который перестраивает всю таблицу с нуля.

Хотя это работает для многих случаев использования, у этого подхода есть явное ограничение: *Некоторые наборы данных просто слишком велики, чтобы поместиться в один запрос.*

Начиная с версии dbt 1.9, вы можете использовать новую [стратегию микропакетной обработки](https://docs.getdbt.tech/docs/build/incremental-microbatch.md#what-is-microbatch-in-dbt) для оптимизации работы с самыми большими наборами данных — **обрабатывайте данные событий за отдельные периоды с помощью отдельных SQL-запросов, а не все сразу.** Преимущества включают:

* **Упрощённое проектирование запросов:** Пишите запрос модели для одного батча данных. dbt будет использовать ваши конфигурации `event_time`, `lookback` и `batch_size`, чтобы автоматически сгенерировать необходимые фильтры, делая процесс более удобным и избавляя вас от необходимости управлять этими деталями вручную.
* **Независимая обработка батчей:** dbt автоматически разбивает данные для загрузки на более мелкие батчи на основе заданного `batch_size` и обрабатывает каждый батч независимо, повышая эффективность и снижая риск тайм-аутов запросов. Если некоторые батчи завершатся с ошибкой, вы можете использовать `dbt retry`, чтобы загрузить только неудавшиеся батчи.
* **Точечная повторная обработка:** Чтобы загрузить *конкретный* батч или несколько батчей, вы можете использовать аргументы CLI `--event-time-start` и `--event-time-end`.
* **[Автоматическое параллельное выполнение батчей](https://docs.getdbt.tech/docs/build/parallel-batch-execution.md):** Обрабатывайте несколько батчей одновременно, а не последовательно, для более быстрой обработки ваших microbatch‑моделей. dbt интеллектуально автоматически определяет, могут ли батчи выполняться параллельно, а также позволяет вручную переопределить параллельное выполнение с помощью конфигурации [`concurrent_batches`](https://docs.getdbt.tech/reference/resource-properties/concurrent_batches.md).

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

* postgres
* redshift
* snowflake
* bigquery
* spark
* databricks

Начиная с версии dbt 1.9, мы упростили настройку снимков и добавили несколько новых параметров, чтобы **снимки dbt было проще настраивать, запускать и адаптировать под свои задачи.** Эти улучшения включают:

Начиная с dbt Core 1.9, мы упростили конфигурацию снимков и добавили несколько новых конфигураций, чтобы сделать **снимки dbt проще в настройке, запуске и кастомизации.** Эти улучшения включают:

* Новая спецификация снимков: Снимки теперь можно настраивать в YAML-файле, что обеспечивает более чистую и согласованную настройку.
* Новая конфигурация `snapshot_meta_column_names`: Позволяет вам кастомизировать имена мета-полей (например, `dbt_valid_from`, `dbt_valid_to` и т.д.), которые dbt автоматически добавляет к снимкам. Это увеличивает гибкость для адаптации метаданных к вашим нуждам.
* `target_schema` теперь является необязательным для снимков: Если не указано, снимки будут использовать схему, определенную для текущей среды.
* Поддержка стандартных конфигураций `schema` и `database`: Снимки теперь будут согласованы с другими типами ресурсов dbt. Вы можете указать, где должны храниться снимки, зависящие от среды.
* Предупреждение о неправильном типе данных `updated_at`: Чтобы обеспечить целостность данных, вы увидите предупреждение, если поле `updated_at`, указанное в конфигурации снимка, не является правильным типом данных или временной меткой.
* Установите пользовательский текущий индикатор для значения `dbt_valid_to`: Используйте конфигурацию [`dbt_valid_to_current`](https://docs.getdbt.tech/reference/resource-configs/dbt_valid_to_current.md), чтобы установить пользовательский индикатор для значения `dbt_valid_to` в текущих записях снимка (например, будущая дата). По умолчанию это значение `NULL`. Когда настроено, dbt будет использовать указанное значение вместо `NULL` для `dbt_valid_to` для текущих записей в таблице снимков.
* Используйте конфигурацию [`hard_deletes`](https://docs.getdbt.tech/reference/resource-configs/hard-deletes.md), чтобы получить больший контроль над тем, как обрабатывать удаленные строки из источника. Поддерживаемые методы: `ignore` (по умолчанию), `invalidate` (заменяет устаревший `invalidate_hard_deletes=true`) и `new_record`. Установка `hard_deletes='new_record'` позволяет отслеживать жесткие удаления, добавляя новую запись, когда строка становится "удаленной" в источнике.

Узнайте больше о [мета-полях снимков](https://docs.getdbt.tech/docs/build/snapshots.md#snapshot-meta-fields).

### Некоторые `properties` были перемещены в `configs`

Следующие `properties` были перенесены в `configs` в [dbt v1.10](https://docs.getdbt.tech/docs/dbt-versions/dbt-upgrade/upgrading-to-v1.10.md), и это изменение также было перенесено в dbt v1.9:

* [`freshness`](https://docs.getdbt.tech/reference/resource-configs/freshness.md) для источников
  * dbt v2 [расширяет проверки актуальности данных](https://docs.getdbt.tech/docs/dbt-versions/dbt-upgrade/upgrading-to-v2.md?version=2#model-freshness-and-the-dbt-freshness-command), добавляя поддержку моделей.
* [`meta`](https://docs.getdbt.tech/reference/resource-configs/meta.md) в разделе `columns`
* [`tags`](https://docs.getdbt.tech/reference/resource-configs/tags.md) в разделе `columns`

### Улучшения `state:modified`

### Улучшения `state:modified`

Мы внесли улучшения в поведение `state:modified`, чтобы помочь снизить риск ложных срабатываний и пропусков. Узнайте больше о [флаге поведения `state:modified`](#what-to-know-before-upgrading), который разблокирует это улучшение:

* Добавлены улучшения, зависящие от среды, для сред, где логика намеренно отличается (например, материализация в виде таблицы в `prod`, но в виде `view` в dev).

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

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

* (Добавлен, отключён по умолчанию) [`state_modified_compare_more_unrendered_values`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/state_modified_compare_more_unrendered_values.md). Установите значение `true`, чтобы сохранять `unrendered_config` при разборе моделей и `unrendered_database`/`unrendered_schema` при разборе источников, а затем сравнивать значения до рендеринга при проверках `state:modified`. Это уменьшает число ложных срабатываний из-за логики, учитывающей окружение, но требует пересоздания каталога состояния; без этого `state:modified` может выбирать узлы с Jinja в конфигурациях YAML, которые на самом деле не изменились.
* (Добавлен, отключён по умолчанию) [Флаг конфигурации проекта `skip_nodes_if_on_run_start_fails`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/skip_nodes_if_on_run_start_fails.md). Если флаг установлен и **любой** хук `on-run-start` завершается с ошибкой, все выбранные узлы помечаются как пропущенные.
  * Хуки `on-run-start/end` **всегда** выполняются независимо от того, завершились ли они успешно или с ошибкой в прошлый раз.

- (Добавлен, отключён по умолчанию) [`require_nested_cumulative_type_params`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/require_nested_cumulative_type_params.md). Если флаг установлен в `true`, пользователи будут получать ошибку вместо предупреждения, если накопительные метрики оформлены неправильно и не используют новую вложенную структуру [`cumulative_type_params`](https://docs.getdbt.tech/docs/build/cumulative.md#parameters).
- (Добавлен, отключён по умолчанию) [`require_batched_execution_for_custom_microbatch_strategy`](https://docs.getdbt.tech/reference/global-configs/behavior-flags/require_batched_execution_for_custom_microbatch_strategy.md). Установите значение `true`, если вы используете пользовательский макрос микропакетной обработки, чтобы включить выполнение по пакетам. Если у вас нет пользовательского макроса микропакетной обработки, устанавливать этот флаг не нужно: dbt автоматически выполняет микропакетную обработку для любой модели, использующей стратегию microbatch.

## Возможности и функциональность отдельных адаптеров

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

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

## Специфические для адаптеров функции и функциональность

### Redshift

* Поддержка аутентификации через IAM Role

### Snowflake

* **Iceberg Table Format** — Поддержка будет доступна для трёх стандартных materializations «из коробки»: `table`, `incremental`, `dynamic tables`.
* **Breaking change** — При обновлении с dbt 1.8 до 1.9 значение `{{ target.account }}` теперь заменяет подчёркивания на дефисы. Например, если `target.account` задан как `sample_company`, то скомпилированный код теперь будет генерировать `sample-company`. Подробнее см. [issue в репозитории `dbt-snowflake`](https://github.com/dbt-labs/dbt-snowflake/issues/1286).

### Bigquery

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

### Spark

* Поддержка переопределения строки подключения драйвера ODBC, что теперь позволяет вам предоставлять пользовательские подключения

Мы также внесли ряд улучшений для удобства работы в dbt 1.9, которые позволят вам:

Мы также внесли некоторые улучшения в качество жизни в Core 1.9, позволяя вам:

* Поддерживать качество данных с учётом того, что dbt теперь возвращает ошибку (для версионированных моделей) или предупреждение (для неверсионированных моделей), когда кто‑то [удаляет контрактную модель — путём удаления, переименования или отключения](https://docs.getdbt.tech/docs/mesh/govern/model-contracts.md).
* Документировать [data tests](https://docs.getdbt.tech/reference/resource-properties/description.md).
* Использовать `ref` и `source` в [ограничениях внешних ключей](https://docs.getdbt.tech/reference/resource-properties/constraints.md).
* Использовать `dbt test` с флагами `--resource-type` / `--exclude-resource-type`, что позволяет включать или исключать data tests (`test`) или unit tests (`unit_test`).
* Конфигурация [`enabled`](https://docs.getdbt.tech/reference/resource-configs/enabled.md) теперь доступна для unit tests. По умолчанию имеет значение `true`, если не определена.
