**Компания:** Авито
**Контекст:** ETL-пайплайн иногда запускается повторно (retry после сбоя, ручной перезапуск). Нужно гарантировать, что повторный запуск не испортит данные.
**Задание:**
1. Реализуйте два паттерна идемпотентного обновления витрины:
- DELETE + INSERT (по дате)
- MERGE (UPSERT)
2. Сравните паттерны: когда какой использовать
3. Напишите тест на идемпотентность: запустите ETL дважды и проверьте результат
Структура для ориентира — реальные значения из эталонного решения.
-- Идемпотентно: повторный запуск даёт тот же результат
BEGIN;
DELETE FROM mart_listings_daily
WHERE dt = :target_date;
INSERT INTO mart_listings_daily (dt, category, listings_count, avg_price, updated_at)
SELECT
created_at::date AS dt,
category,
COUNT(*) AS listings_count,
AVG(price) AS avg_price,
NOW()
FROM listings
WHERE created_at::date = :target_date
GROUP BY created_at::date, category;
COMMIT;
идемпотентность MERGE DELETE INSERT ETL паттерн
Это задание для уровня medium. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: идемпотентность, MERGE, DELETE INSERT, ETL, паттерн.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.
← Все задания