После перезапуска упавшей загрузки суммы за день задвоились
Ежедневная загрузка витрины устроена так:
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, чтобы запуск за дату не начинался, пока не завершится предыдущий, — одновременная запись в один день прекратится.
