Обновление до версии v1.9
dbt Labs стремится обеспечивать обратную совместимость для всех версий 1.x. Любые изменения поведения будут сопровождаться флагом изменения поведения, чтобы предоставить время для миграции существующих проектов. Если после обновления вы столкнётесь с ошибкой, сообщите нам об этом, создав issue.
dbt предоставляет функциональность новых версий dbt v1 через каналы выпуска с автоматическими обновлениями. Если вы выбрали канал выпуска 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 в файле dbt_project.yml, чтобы включить пакетное выполнение. Если у вас нет пользовательского макроса microbatch, устанавливать этот флаг не нужно: dbt автоматически выполнит обработку микропакетами для любой модели, использующей стратегию microbatch.
Инкрементальные модели всегда были оптимизацией производительности — для наборов данных, которые слишком велики, чтобы их можно было удалять и воссоздавать с нуля каждый раз, когда вы выполняете dbt run. Узнайте больше об инкрементальных моделях.
Исторически управление инкрементальными моделями включало несколько ручных шагов и обязанностей, включая:
- Добавление фрагмента кода dbt (в блоке
is_incremental()), который использует уже существующую таблицу (this) в качестве грубой закладки, чтобы обрабатывать только новые данные. - Выбор одной из стратегий для объединения старых и новых данных (
append,delete+insertилиmerge). - Если что-то идет не так или ваша схема изменяется, вы всегда можете выполнить "полное обновление", запустив тот же простой запрос, который перестраивает всю таблицу с нуля.
Хотя это работает для многих случаев использования, у этого подхода есть явное ограничение: Некоторые наборы данных просто слишком велики, чтобы поместиться в один запрос.
Начиная с версии dbt 1.9, вы можете использовать новую стратегию микропакетной обработки для оптимизации работы с самыми большими наборами данных — обрабатывайте данные событий за отдельные периоды с помощью отдельных SQL-запросов, а не все сразу. Преимущества включают:
- Упрощённое проектирование запросов: Пишите запрос модели для одного батча данных. dbt будет использовать ваши конфигурации
event_time,lookbackиbatch_size, чтобы автоматически сгенерировать необходимые фильтры, делая процесс более удобным и избавляя вас от необходимости управлять этими деталями вручную. - Независимая обработка батчей: dbt автоматически разбивает данные для загрузки на более мелкие батчи на основе заданного
batch_sizeи обрабатывает каждый батч независимо, повышая эффективность и снижая риск тайм-аутов запросов. Если некоторые батчи завершатся с ошибкой, вы можете использоватьdbt retry, чтобы загрузить только неудавшиеся батчи. - Точечная повторная обработка: Чтобы загрузить конкретный батч или несколько батчей, вы можете использовать аргументы CLI
--event-time-startи--event-time-end. - Автоматическое параллельное выполнение батчей: Обрабатывайте несколько батчей одновременно, а не последовательно, для более быстрой обработки ваших microbatch‑моделей. dbt интеллектуально автоматически определяет, могут ли батчи выполняться параллельно, а также позволяет вручную переопределить параллельное выполнение с помощью конфигурации
concurrent_batches.
В настоящее время микропакеты поддерживаются на следующих адаптерах, и в будущем их станет больше:
- 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, чтобы установить пользовательский индикатор для значенияdbt_valid_toв текущих записях снимка (например, будущая дата). По умолчанию это значениеNULL. Когда настроено, dbt будет использовать указанное значение вместоNULLдляdbt_valid_toдля текущих записей в таблице снимков. - Используйте конфигурацию
hard_deletes, чтобы получить больший контроль над тем, как обрабатывать удаленные строки из источника. Поддерживаемые методы:ignore(по умолчанию),invalidate(заменяет устаревшийinvalidate_hard_deletes=true) иnew_record. Установкаhard_deletes='new_record'позволяет отслеживать жесткие удаления, добавляя новую запись, когда строка становится "удаленной" в источнике.
Узнайте больше о мета-полях снимков.
Некоторые properties были перемещены в configs
Следующие properties были перенесены в configs в dbt v1.10, и это изменение также было перенесено в dbt v1.9:
freshnessдля источников- dbt v2 расширяет проверки актуальности данных, добавляя поддержку моделей.
metaв разделеcolumnstagsв разделеcolumns
Улучшения state:modified
Улучшения state:modified
Мы внесли улучшения в поведение state:modified, чтобы помочь снизить риск ложных срабатываний и пропусков. Узнайте больше о флаге поведения state:modified, который разблокирует это улучшение:
- Добавлены улучшения, зависящие от среды, для сред, где логика намеренно отличается (например, материализация в виде таблицы в
prod, но в видеviewв dev).
В dbt v1.9 появилось несколько новых флагов для управления изменениями прежнего поведения. Вы можете включить недавно добавленные изменения (по умолчанию отключены) или отключить устоявшиеся изменения (по умолчанию включены), задав для соответствующих флагов в разделе flags файла dbt_project.yml значения true / false соответственно.
dbt Core v1.9 имеет несколько новых флагов для управления изменениями в устаревших поведениях. Вы можете включить недавно введенные изменения (отключены по умолчанию) или отключить зрелые изменения (включены по умолчанию), установив значения True / False соответственно для flags в dbt_project.yml.
- (Добавлен, отключён по умолчанию)
state_modified_compare_more_unrendered_values. Установите значениеtrue, чтобы сохранятьunrendered_configпри разборе моделей иunrendered_database/unrendered_schemaпри разборе источников, а затем сравнивать значения до рендеринга при проверкахstate:modified. Это уменьшает число ложных срабатываний из-за логики, учитывающей окружение, но требует пересоздания каталога состояния; без этогоstate:modifiedможет выбирать узлы с Jinja в конфигурациях YAML, которые на самом деле не изменились. - (Добавлен, отключён по умолчанию) Флаг конфигурации проекта
skip_nodes_if_on_run_start_fails. Если флаг установлен и любой хукon-run-startзавершается с ошибкой, все выбранные узлы помечаются как пропущенные.- Хуки
on-run-start/endвсегда выполняются независимо от того, завершились ли они успешно или с ошибкой в прошлый раз.
- Хуки
- (Добавлен, отключён по умолчанию)
require_nested_cumulative_type_params. Если флаг установлен вtrue, пользователи будут получать ошибку вместо предупреждения, если накопительные метрики оформлены неправильно и не используют новую вложенную структуруcumulative_type_params. - (Добавлен, отключён по умолчанию)
require_batched_execution_for_custom_microbatch_strategy. Установите значениеtrue, если вы используете пользовательский макрос микропакетной обработки, чтобы включить выполнение по пакетам. Если у вас нет пользовательского макроса микропакетной обработки, устанавливать этот флаг не нужно: dbt автоматически выполняет микропакетную обработку для любой модели, использующей стратегию microbatch.
Возможности и функциональность отдельных адаптеров
Snowflake планирует увеличить размер столбцов по умолчанию для строковых и двоичных типов данных в сентябре 2026 года. После внедрения этого изменения в версиях dbt-snowflake ниже v1.10.6 могут возникать ошибки при построении некоторых инкрементальных моделей.
Специфические для адаптеров функции и функциональность
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.
Bigquery
- Возможность отмены выполняющихся запросов при прерывании клавиатурой
- Автоматическое удаление промежуточных таблиц, созданных инкрементальными моделями, для экономии ресурсов
Spark
- Поддержка переопределения строки подключения драйвера ODBC, что теперь позволяет вам предоставлять пользовательские подключения
Мы также внесли ряд улучшений для удобства работы в dbt 1.9, которые позволят вам:
Мы также внесли некоторые улучшения в качество жизни в Core 1.9, позволяя вам:
- Поддерживать качество данных с учётом того, что dbt теперь возвращает ошибку (для версионированных моделей) или предупреждение (для неверсионированных моделей), когда кто‑то удаляет контрактную модель — путём удаления, переименования или отключения.
- Документировать data tests.
- Использовать
refиsourceв ограничениях внешних ключей. - Использовать
dbt testс флагами--resource-type/--exclude-resource-type, что позволяет включать или исключать data tests (test) или unit tests (unit_test). - Конфигурация
enabledтеперь доступна для unit tests. По умолчанию имеет значениеtrue, если не определена.