Перейти к основному содержимому

hard_deletes

💡Did you know...
Available from dbt v1.9 or with the dbt "Latest" release track.
snapshots/schema.yml
snapshots:
- name: <snapshot_name>
config:
hard_deletes: 'ignore' | 'invalidate' | 'new_record'
dbt_project.yml
snapshots:
<resource-path>:
+hard_deletes: "ignore" | "invalidate" | "new_record"
snapshots/<filename>.sql
{{
config(
unique_key='id',
strategy='timestamp',
updated_at='updated_at',
hard_deletes='ignore' | 'invalidate' | 'new_record'
)
}}

Описание​

Description​

Конфигурация hard_deletes дает вам больше контроля над тем, как обрабатывать строки, удалённые из источника. Поддерживаются следующие варианты: ignore (по умолчанию), invalidate (заменяет устаревший параметр invalidate_hard_deletes=true) и new_record. Обратите внимание, что new_record создаст новый служебный столбец с метаданными в таблице snapshot.

Параметр hard_deletes можно использовать с адаптерами dbt-postgres, dbt-bigquery, dbt-snowflake и dbt-redshift.

 Когда использовать конфигурации hard_deletes и invalidate_hard_deletes?

Используйте invalidate_hard_deletes (v1.8 и ранее), если:

  • Пробелы в истории снимков (отсутствие записей для удаленных строк) допустимы.
  • Вы хотите аннулировать удаленные строки, установив для их временной метки dbt_valid_to текущее время (неявное удаление).
  • Вы работаете с небольшими наборами данных, где отслеживание удалений как отдельного состояния не требуется.

Используйте hard_deletes: new_record (v1.9 и выше), если:

  • Вы хотите поддерживать непрерывную историю снимков без пробелов.
  • Вы хотите явно отслеживать удаления, добавляя новые строки с колонкой dbt_is_deleted (явное удаление).
  • Вы работаете с большими наборами данных, где явное отслеживание удаленных записей улучшает ясность происхождения данных.
warning

Если вы обновляете существующий снимок для использования конфигурации hard_deletes, dbt не будет автоматически обрабатывать миграции. Мы рекомендуем использовать эти настройки только для новых снимков или организовать обновление существующих таблиц перед включением этой настройки.

По умолчанию​

По умолчанию, если вы не указываете hard_deletes, он автоматически будет установлен в ignore. Удаленные строки не будут отслеживаться, и их столбец dbt_valid_to останется NULL.

Конфигурация hard_deletes имеет три метода:

МетодыОписание
ignore (по умолчанию)Нет действий для удаленных записей.
invalidateВедет себя так же, как существующая invalidate_hard_deletes=true, где удаленные записи аннулируются путем установки dbt_valid_to на текущее время. Этот метод заменяет конфигурацию invalidate_hard_deletes, чтобы дать вам больше контроля над тем, как обрабатывать удаленные строки из источника.
new_recordОтслеживает удаленные записи как новые строки, используя метаполе dbt_is_deleted, когда записи удаляются.
Loading table...

Соображения​

  • Обратная совместимость: Конфигурация invalidate_hard_deletes все еще поддерживается для существующих снимков, но не может использоваться вместе с hard_deletes.
  • Новые снимки: Для новых снимков мы рекомендуем использовать hard_deletes вместо invalidate_hard_deletes.
  • Миграция: Если вы переключаете существующий снимок на использование hard_deletes без миграции ваших данных, вы можете столкнуться с несоответствующими или некорректными результатами, такими как смешение старых и новых форматов данных.

Пример​

snapshots/schema.yml
snapshots:
- name: my_snapshot
config:
hard_deletes: new_record # варианты: 'ignore', 'invalidate', или 'new_record'
strategy: timestamp
updated_at: updated_at
columns:
- name: dbt_valid_from
description: Временная метка, когда запись стала действительной.
- name: dbt_valid_to
description: Временная метка, когда запись перестала быть действительной.
- name: dbt_is_deleted
description: Указывает, была ли запись удалена.

Полученная таблица снимков содержит конфигурацию hard_deletes: new_record. Если запись удалена и позже восстановлена, полученная таблица снимков может выглядеть следующим образом:

iddbt_scd_idСтатусdbt_updated_atdbt_valid_fromdbt_valid_todbt_is_deleted
160a1f1dbdf899a4dd...pending2024-10-02 ...2024-05-19...2024-05-20 ...False
1b1885d098f8bcff51...pending2024-10-02 ...2024-05-20 ...2024-06-03 ...True
1b1885d098f8bcff53...shipped2024-10-02 ...2024-06-03 ...False
2b1885d098f8bcff55...active2024-10-02 ...2024-05-19 ...False
Loading table...

В этом примере столбец dbt_is_deleted устанавливается в True, когда запись удалена. Когда запись восстанавливается, столбец dbt_is_deleted устанавливается в False.

Нашли ошибку?

0
Loading