Конфигурации снимков
Узнайте об использовании конфигураций снимков в dbt, включая конфигурации, специфичные для снимков, и общие конфигурации.
Связанная документация
Доступные конфигурации
Конфигурации, специфичные для snapshot’ов
Конфигурации, специфичные для ресурса, применимы только к одному типу ресурса dbt, а не к нескольким типам ресурсов. Вы можете определить эти настройки в файле проекта (dbt_project.yml), в файле свойств (models/properties.yml для моделей, аналогично для других ресурсов) или внутри файла ресурса, используя макрос {{ config() }}.
Следующие конфигурации, специфичные для ресурса, доступны только для Snapshots:
- Файл проекта
- Файл свойств
- Конфигурация SQL-файла
Начиная с трека релизов dbt «Latest» и dbt Core v1.9, определение снапшотов в файле .sql с использованием блока config — это устаревший подход. Вместо этого вы можете определять снапшоты в YAML-файлах свойств (properties) с использованием актуальных настроек, специфичных для снапшотов. Для новых снапшотов мы рекомендуем использовать именно эти актуальные настройки. Если вы применяете их к существующим снапшотам, потребуется выполнить миграцию.
Миграция конфигурации снимков
Последние конфигурации снапшотов, представленные в dbt Core v1.9 (такие как snapshot_meta_column_names, dbt_valid_to_current и hard_deletes), лучше всего подходят для новых снапшотов. Однако вы также можете внедрить их в уже существующие снапшоты, аккуратно выполнив миграцию схемы таблицы и конфигураций, чтобы избежать несогласованностей в данных снапшота.
Ниже описан рекомендуемый порядок действий:
-
В вашей платформе данных создайте резервную копию таблицы снапшота. Например, вы можете скопировать её в новую таблицу:
create table my_snapshot_table_backup as
select * from my_snapshot_table;Это позволит восстановить снапшот, если во время миграции что-то пойдёт не так.
-
Если вы планируете использовать новые конфигурации, добавьте необходимые колонки в существующую таблицу снапшота с помощью
alter‑запросов. Ниже приведён пример того, какие колонки нужно добавить при использованииdbt_valid_to_currentиsnapshot_meta_column_names:alter table my_snapshot_table
add column dbt_valid_from timestamp,
add column dbt_valid_to timestamp; -
Затем обновите конфигурацию снапшота:
snapshots:
- name: orders_snapshot
relation: source('something','orders')
config:
strategy: timestamp
updated_at: updated_at
unique_key: id
dbt_valid_to_current: "to_date('9999-12-31')"
snapshot_meta_column_names:
dbt_valid_from: start_date
dbt_valid_to: end_date -
Перед тем как внедрять сразу несколько новых конфигураций, тестируйте каждое изменение отдельно, запуская
dbt snapshotв среде разработки или staging. -
Убедитесь, что выполнение снапшота завершается без ошибок, новые колонки создаются, а логика хранения истории работает так, как вы ожидаете. В результате таблица должна выглядеть примерно так:
Loading table... Примечание: колонка
end_date(заданная черезsnapshot_meta_column_names) использует значение, указанное вdbt_valid_to_current(9999-12-31), для новых вставляемых записей вместо значения по умолчаниюNULL. Для существующих записей значениеend_dateостанетсяNULL.
Если вы используете одну из последних конфигураций, таких как dbt_valid_to_current, без миграции ваших данных, у вас могут быть смешанные старые и новые данные, что приведет к некорректному результату.
Общие конфигурации
Общие конфигурации предоставляют более широкие операционные настройки, применимые к нескольким типам ресурсов. Как и конфигурации, специфичные для ресурсов, они также могут быть заданы в файле проекта, файлах свойств или в файлах, специфичных для ресурсов.
- Файл проекта
- Файл свойств
- Конфигурация в SQL-файле
Начиная с трека релизов dbt «Latest» и dbt Core v1.9, определение снапшотов в файле .sql с использованием блока config — это устаревший подход. Вместо этого вы можете определять снапшоты в YAML-файлах свойств (properties) с использованием актуальных настроек, специфичных для снапшотов. Для новых снапшотов мы рекомендуем использовать именно эти актуальные настройки. Если вы применяете их к существующим снапшотам, потребуется выполнить миграцию.
Настройка снимков
Снимки могут быть настроены несколькими способами:
Конфигурации снапшотов применяются иерархически в указанном выше порядке, при этом более высокие уровни имеют приоритет. Вы также можете применять data tests к снапшотам с помощью свойства tests.
Примеры
-
Применение конфигураций ко всем снимкам
Чтобы применить конфигурацию ко всем снимкам, включая те, что в установленных пакетах, вложите конфигурацию непосредственно под ключ
snapshots:dbt_project.ymlsnapshots:
+unique_key: id -
Применение конфигураций ко всем снимкам в вашем проекте
Чтобы применить конфигурацию ко всем снимкам только в вашем проекте (например, исключая любые снимки в установленных пакетах), укажите имя вашего проекта как часть пути к ресурсу.
Для проекта с именем
jaffle_shop:dbt_project.ymlsnapshots:
jaffle_shop:
+unique_key: idАналогично, вы можете использовать имя установленного пакета для настройки снимков в этом пакете.
-
Применение конфигураций только к одному snapshot
Вы также можете использовать полный путь к ресурсу (включая имя проекта и подкаталоги) для настройки отдельного снимка из вашего файла
dbt_project.yml.Для проекта с именем
jaffle_shop, с файлом снимка в каталогеsnapshots/postgres_app/, где снимок называетсяorders_snapshot(как выше), это будет выглядеть так:dbt_project.ymlsnapshots:
jaffle_shop:
postgres_app:
orders_snapshot:
+unique_key: id
+strategy: timestamp
+updated_at: updated_atВы также можете определить некоторые общие конфигурации в блоке
configснимка. Однако мы не рекомендуем это для обязательной конфигурации снимка.dbt_project.yml
snapshots:
- name: orders_snapshot
+persist_docs:
relation: true
columns: true