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

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.

models/my_incremental_model.sql
{{
config(
materialized='incremental',
unique_key='id'
)
}}

models/properties.yml
models:
- name: my_incremental_model
description: "Пример инкрементальной модели с уникальным ключом."
config:
materialized: incremental
unique_key: id

dbt_project.yml
name: jaffle_shop

models:
jaffle_shop:
staging:
+unique_key: id

Описание​

Имя столбца или выражение, которое однозначно идентифицирует каждую запись во входных данных 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 является уникальным ключом для инкрементальной модели.

models/my_incremental_model.sql
{{
config(
materialized='incremental',
unique_key='id'
)
}}

select * from ..

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

0
Loading