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

После перезапуска упавшей загрузки суммы за день задвоились

Ежедневная загрузка витрины устроена так:

INSERT INTO dm.sales_daily
SELECT order_date, branch_id, sum(amount)
FROM dds.orders
WHERE order_date = '{{ ds }}'
GROUP BY order_date, branch_id;

Таска упала по таймауту уже после того, как часть строк была записана, и была перезапущена. В витрине за этот день суммы по нескольким филиалам оказались задвоены.

Что нужно изменить, чтобы повторный запуск за ту же дату давал тот же результат?

  • Отключить автоматические retries и перезапускать упавшие таски вручную после проверки витрины: без повторных запусков дубли не появятся.
  • Добавить DISTINCT в SELECT: одинаковые строки схлопнутся уже при вставке, и повторный запуск не сможет задвоить суммы по филиалам.
  • Сделать шаг идемпотентным: перед вставкой удалять данные за эту дату (DELETE или подмена партиции) и выполнять удаление и вставку как одну операцию.
  • Включить depends_on_past и ограничить max_active_runs = 1, чтобы запуск за дату не начинался, пока не завершится предыдущий, — одновременная запись в один день прекратится.

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

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

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

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