snapshot_meta_column_names
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>
{{
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:
<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:
| Loading table... |
Все эти имена колонок можно настроить с помощью конфигурации snapshot_meta_column_names. Подробнее см. в разделе Пример.
Чтобы избежать непреднамеренных изменений данных, 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:
- Стратегия
timestamp: хеш, как правило, объединяет колонкиunique_keyи значениеupdated_at. - Стратегия
check: хеш объединяет колонкиunique_keyи значения колонок, перечисленных вcheck_cols.
Если вы не хотите использовать md5, можно переопределить dispatched macro.
Пример
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 содержит настроенные имена мета-колонок:
| Loading table... |