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

snapshot_meta_column_names

💡Did you know...
Available from dbt v1.9 or with the dbt "Latest" release track.
snapshots/schema.yml
snapshots:
- name: <snapshot_name>
config:
snapshot_meta_column_names:
dbt_valid_from: <string>
dbt_valid_to: <string>
dbt_scd_id: <string>
dbt_updated_at: <string>
dbt_is_deleted: <string>

snapshots/<filename>.sql
{{
config(
snapshot_meta_column_names={
"dbt_valid_from": "<string>",
"dbt_valid_to": "<string>",
"dbt_scd_id": "<string>",
"dbt_updated_at": "<string>",
"dbt_is_deleted": "<string>",
}
)
}}

dbt_project.yml
snapshots:
<resource-path>:
+snapshot_meta_column_names:
dbt_valid_from: <string>
dbt_valid_to: <string>
dbt_scd_id: <string>
dbt_updated_at: <string>
dbt_is_deleted: <string>

Описание

Чтобы привести имена колонок в соответствие с соглашениями об именовании, принятыми в организации, можно использовать конфигурацию snapshot_meta_column_names. Она позволяет настраивать имена метаданных колонок внутри каждого snapshot.

Значения по умолчанию

По умолчанию snapshots в dbt используют следующие имена колонок для отслеживания истории изменений с помощью записей медленно изменяющегося измерения типа 2:

Field
Назначение
ПримечанияПример
dbt_valid_fromВременная метка, когда эта строка snapshot была впервые вставлена и стала валидной.Значение зависит от конфигурации strategy.snapshot_meta_column_names: {dbt_valid_from: start_date}
dbt_valid_toВременная метка, когда эта строка перестает быть валидной.snapshot_meta_column_names: {dbt_valid_to: end_date}
dbt_scd_idУникальный ключ, сгенерированный для каждой строки snapshot.Используется dbt внутренне.snapshot_meta_column_names: {dbt_scd_id: scd_id}
dbt_updated_atЗначение updated_at исходной записи на момент вставки этой строки snapshot.Используется dbt внутренне.snapshot_meta_column_names: {dbt_updated_at: modified_date}
dbt_is_deletedСтроковое значение, указывающее, была ли запись удалена (True — удалена, False — не удалена).Добавляется, когда настроен hard_deletes='new_record'.snapshot_meta_column_names: {dbt_is_deleted: is_deleted}
Loading table...

Все эти имена колонок можно настроить с помощью конфигурации snapshot_meta_column_names. Подробнее см. в разделе Пример.

warning

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

Как вычисляется dbt_scd_id

dbt_scd_id — это уникальный идентификатор, генерируемый для каждой строки snapshot. dbt использует его для определения изменений в исходных записях и управления версионированием в snapshot на основе медленно изменяющихся измерений (SCD).

Макрос snapshot в dbt обрабатывает dbt_scd_id в репозитории dbt-adapters.

Хеш вычисляется путем конкатенации значений unique_key snapshot и либо временной метки updated_at (для стратегии timestamp), либо значений из check_cols (для стратегии check). Затем полученная строка хешируется с помощью функции md5. Это позволяет dbt отслеживать, изменилось ли содержимое строки между запусками.

Ниже приведен пример пользовательского вычисления хеша, который объединяет несколько полей в одну строку и хеширует результат с помощью md5.

md5(
coalesce(cast(unique_key1 as string), '') || '|' ||
coalesce(cast(unique_key2 as string), '') || '|' ||
coalesce(cast(updated_at as string), '')
)

Точный набор полей, участвующих в хеше, зависит от стратегии snapshot:

Если вы не хотите использовать md5, можно переопределить dispatched macro.

Пример

snapshots/schema.yml
snapshots:
- name: orders_snapshot
relation: ref("orders")
config:
unique_key: id
strategy: check
check_cols: all
hard_deletes: new_record
snapshot_meta_column_names:
dbt_valid_from: start_date
dbt_valid_to: end_date
dbt_scd_id: scd_id
dbt_updated_at: modified_date
dbt_is_deleted: is_deleted

В результате таблица snapshot содержит настроенные имена мета-колонок:

idscd_idmodified_datestart_dateend_dateis_deleted
160a1f1dbdf899a4dd...2024-10-02 ...2024-10-02 ...2024-10-03 ...False
160a1f1dbdf899a4dd...2024-10-03 ...2024-10-03 ...True
2b1885d098f8bcff51...2024-10-02 ...2024-10-02 ...False
Loading table...

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

0
Loading