Обновление до версии v1.9
Что нужно знать перед обновлением
Начиная с 2024 года, dbt предоставляет функциональность новых версий dbt Core через release tracks с автоматическими обновлениями. Если вы выбрали трек выпуска "Latest" в dbt, у вас уже есть доступ ко всем возможностям, исправлениям и другой функциональности, которые включены в dbt Core v1.9. Если вы выбрали трек выпуска "Compatible", вы получите доступ в следующем ежемесячном выпуске "Compatible" после финального релиза dbt Core v1.9.
Начиная с 2024 года, dbt Cloud предоставляет функциональность из новых версий dbt Core через треки выпусков с автоматическими обновлениями. Если вы выбрали трек "Latest" в dbt Cloud, у вас уже есть доступ ко всем функциям, исправлениям и другим возможностям, которые включены в dbt Core v1.9! Если вы выбрали трек "Compatible", вы получите доступ в следующем ежемесячном выпуске "Compatible" после финального выпуска dbt Core v1.9.
Для пользователей dbt Core, начиная с версии v1.8, мы рекомендуем явно устанавливать как dbt-core, так и dbt-<youradapter>. Это может стать обязательным в будущей версии dbt. Например:
python3 -m pip install dbt-core dbt-snowflake
Новые и измененные функции и функциональность
Новые функции и функциональность в dbt v1.9.
incremental_strategy с микропакетами
Если вы используете пользовательский макрос микропакетов, установите флаг поведения require_batched_execution_for_custom_microbatch_strategy в вашем dbt_project.yml, чтобы включить пакетное выполнение. Если у вас нет пользовательского макроса микропакетов, вам не нужно устанавливать этот флаг, так как dbt автоматически обработает микропакетирование для любой модели, использующей стратегию микропакетов.
Инкрементальные модели всегда были оптимизацией производительности — для наборов данных, которые слишком велики, чтобы их можно было удалять и воссоздавать с нуля каждый раз, когда вы выполняете dbt run. Узнайте больше об инкрементальных моделях.
Исторически управление инкрементальными моделями включало несколько ручных шагов и обязанностей, включая:
- Добавление фрагмента кода dbt (в блоке
is_incremental()), который использует уже существующую таблицу (this) в качестве грубой закладки, чтобы обрабатывать только новые данные. - Выбор одной из стратегий для объединения старых и новых данных (
append,delete+insertилиmerge). - Если что-то идет не так или ваша схема изменяется, вы всегда можете выполнить "полное обновление", запустив тот же простой запрос, который перестраивает всю таблицу с нуля.
Хотя это работает для многих случаев использования, у этого подхода есть явное ограничение: Некоторые наборы данных просто слишком велики, чтобы поместиться в один запрос.
Начиная с Core 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 Core 1.9, мы упростили конфигурацию snapshots и добавили несколько новых параметров, чтобы сделать snapshots в 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 в Core v1.10 и портированы обратно в Core v1.9:
Улучшения state:modified
Улучшения state:modified
Мы внесли улучшения в поведение state:modified, чтобы помочь снизить риск ложных срабатываний и пропусков. Узнайте больше о флаге поведения state:modified, который разблокирует это улучшение:
- Добавлены улучшения, зависящие от среды, для сред, где логика намеренно отличается (например, материализация в виде таблицы в
prod, но в видеviewв dev).
Управление изменениями в устаревших поведениях
dbt Core v1.9 имеет несколько новых флагов для управления изменениями в устаревших поведениях. Вы можете включить недавно введенные изменения (отключены по умолчанию) или отключить зрелые изменения (включены по умолчанию), установив значения True / False соответственно для flags в dbt_project.yml.
Вы можете узнать больше о каждом из этих изменений поведения по следующим ссылкам:
- (Введено, отключено по умолчанию)
state_modified_compare_more_unrendered_values. Установите вTrue, чтобы начать сохранятьunrendered_databaseиunrendered_schemaконфигурации во время парсинга источника и выполнять сравнение на неотрендеренных значениях во время проверокstate:modified, чтобы уменьшить ложные срабатывания из-за логики, зависящей от среды, при выбореstate:modified. - (Введено, отключено по умолчанию)
skip_nodes_if_on_run_start_failsпроектный флаг конфигурации. Если флаг установлен и любойon-run-startхук не удается, пометьте все выбранные узлы как пропущенные.on-run-start/endхуки всегда выполняются, независимо от того, прошли они или не прошли в прошлый раз.
- (Введено, отключено по умолчанию) [Redshift]
restrict_direct_pg_catalog_access. Если флаг установлен, адаптер будет использовать API Redshift (через клиент Python), если он доступен, или запрашивать таблицыinformation_schemaRedshift вместо использования таблицpg_. - (Введено, отключено по умолчанию)
require_nested_cumulative_type_params. Если флаг установлен вTrue, пользователи получат ошибку вместо предупреждения, если они неправильно форматируют кумулятивные метрики, используя новое вложениеcumulative_type_params. - (Введено, отключено по умолчанию)
require_batched_execution_for_custom_microbatch_strategy. Установите вTrue, если вы используете пользовательский макрос микропакетов для включения пакетного выполнения. Если у вас нет пользовательского макроса микропакетов, вам не нужно устанавливать этот флаг, так как dbt автоматически обработает микропакетирование для любой модели, использующей стратегию микропакетов.
Специфические для адаптеров функции и функциональность
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, что теперь позволяет вам предоставлять пользовательские подключения
Быстрые изменения
Мы также внесли некоторые улучшения в качество жизни в 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, если не определена.