**Ситуация:** 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. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.
← Все задания