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

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