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

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