unique_key
unique_key identifies records for incremental models or snapshots, ensuring changes are captured or updated correctly.
- Модели
- Снимки
Настройте unique_key в блоке config вашего SQL файла инкрементальной модели, в вашем файле models/properties.yml или в вашем файле dbt_project.yml.
{{
config(
materialized='incremental',
unique_key='id'
)
}}
models:
- name: my_incremental_model
description: "Пример инкрементальной модели с уникальным ключом."
config:
materialized: incremental
unique_key: id
name: jaffle_shop
models:
jaffle_shop:
staging:
+unique_key: id
snapshots:
<resource-path>:
+unique_key: column_name_or_expression
Описание
Имя столбца или выражение, которое однозначно идентифицирует каждую запись во входных данных snapshot или инкрементальной модели. dbt использует этот ключ для сопоставления входящих записей с существующими записями в целевой таблице (будь то snapshot или инкрементальная модель), чтобы изменения могли быть корректно зафиксированы или обновлены:
- В инкрементальной модели dbt заменяет старую строку (аналогично merge key или upsert).
- В snapshot dbt сохраняет историю, храня несколько строк для одного и того же
unique_keyпо мере его изменения во времени.
В треке релизов dbt «Latest» и начиная с dbt v1.9, snapshots определяются и настраиваются в YAML-файлах внутри вашего каталога snapshots/. Вы можете указать одно или несколько значений unique_key в ключе config YAML-файла snapshot.
Предоставление неуникального ключа приведет к неожиданным результатам снимка. dbt не будет проверять уникальность этого ключа, рассмотрите возможность тестирования исходных данных, чтобы убедиться, что этот ключ действительно уникален.
Значение по умолчанию
Этот параметр является необязательным. Если вы не укажете unique_key, адаптер по умолчанию будет использовать incremental_strategy: append.
Если параметр unique_key не задан и используются такие стратегии, как merge, insert_overwrite, delete+insert или microbatch, адаптер выполнит откат к использованию incremental_strategy: append.
Для BigQuery поведение отличается:
- Для
incremental_strategy = mergeнеобходимо указатьunique_key; его отсутствие приводит к неоднозначному или ошибочному поведению. - Для
insert_overwriteилиmicrobatchпараметрunique_keyне требуется, так как эти стратегии работают за счёт замены партиций, а не обновлений на уровне строк.
Примеры
Использование столбца id в качестве уникального ключа
- Модели
- Снимки
В этом примере столбец id является уникальным ключом для инкрементальной модели.
{{
config(
materialized='incremental',
unique_key='id'
)
}}
select * from ..
В этом примере столбец id используется как уникальный ключ для снимка.
Вы также можете задать конфигурации в файле dbt_project.yml, если несколько snapshot используют один и тот же unique_key:
snapshots:
<resource-path>:
+unique_key: id