Идемпотентная загрузка: дедупликация при ретраях

Middle data_engineering data

Условие задания

**Ситуация:** ETL-джоб грузит события из очереди в таблицу-приёмник. При ретраях/перезапусках одно и то же событие может прийти дважды (at-least-once доставка). Нужна **идемпотентная** загрузка — повторный запуск не создаёт дублей.

**Задание:** опишите стратегию дедупликации и приведите SQL-подход (MERGE/upsert) для таблицы `fact_events(event_id, user_id, event_ts, payload)`.

Пример данных

Структура для ориентира — реальные значения из эталонного решения.

CREATE UNIQUE INDEX IF NOT EXISTS uq_events ON fact_events(event_id);

INSERT INTO fact_events (event_id, user_id, event_ts, payload)
SELECT event_id, user_id, event_ts, payload
FROM staging_events
ON CONFLICT (event_id) DO NOTHING;   -- повторный запуск ничего не задвоит

Темы

idempotency dedup upsert etl merge

Подсказки

Все тестовые задания →

Частые вопросы

Какой уровень знаний нужен для задачи "Идемпотентная загрузка: дедупликация при ретраях"?

Это задание для уровня Middle. Для middle-аналитиков с опытом 1-3 года, требует уверенного владения темой и понимания edge cases.

На каких собеседованиях встречается такая задача?

Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: idempotency, dedup, upsert, etl, merge.

Сколько времени даётся на решение?

На реальном собеседовании на подобную задачу отводится 15-30 минут — оцениваются подход, корректность, обработка edge cases. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

Где ещё потренироваться по теме «data_engineering»?

На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.

← Все задания