Вступить в клуб →
средняявопросСлои DWH и моделирование витрин

Инкрементальная модель dbt накапливает две версии одного заказа

Модель витрины в dbt:

{{ config(materialized='incremental') }}

select order_id, client_id, status, amount, updated_at
from {{ ref('ods_orders') }}
{% if is_incremental() %}
  where updated_at > (select max(updated_at) from {{ this }})
{% endif %}

Заказы, у которых меняется статус, попадают в модель повторно, и в витрине оказываются две строки по одному order_id — со старым и новым статусом. Тест unique по order_id падает.

Что исправит ситуацию?

  • Сменить материализацию на view: данные всегда будут актуальными, дубли не появятся, а пересчёт возьмёт на себя движок хранилища.
  • Заменить условие на updated_at >= (select max(updated_at) from {{ this }}): граница окна станет корректной, и повторные версии перестанут попадать в модель.
  • Добавить distinct в select: повторяющиеся заказы схлопнутся при следующем прогоне, и тест unique перестанет падать.
  • Задать unique_key = 'order_id' в config: инкрементальная стратегия начнёт заменять существующую строку, а не только добавлять новую.

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела