**Компания:** Тинькофф
**Контекст:** Мобильное приложение отправляет события с задержкой (offline-режим). Событие от 10 марта может прийти 15 марта. Витрина ежедневной активности уже рассчитана за 10 марта. Нужно корректно обработать опоздавшие данные.
[см. код в задании]
**Задание:**
1. Напишите запрос для определения, за какие даты нужен пересчёт (появились новые события)
2. Реализуйте идемпотентный пересчёт витрины за затронутые даты
3. Предложите стратегию: какое окно пересчёта оптимально
Структура для ориентира — реальные значения из эталонного решения.
-- Пересчитать витрину за указанные даты
WITH dates_to_recalc AS (
SELECT DISTINCT e.event_ts::date AS dt
FROM raw_events e
LEFT JOIN mart_daily_activity m ON e.event_ts::date = m.dt
WHERE e.loaded_at > COALESCE(m.calculated_at, '1970-01-01')
AND e.event_ts::date >= CURRENT_DATE - INTERVAL '7 days'
)
DELETE FROM mart_daily_activity
WHERE dt IN (SELECT dt FROM dates_to_recalc);
INSERT INTO mart_daily_activity (dt, active_users, total_events, calculated_at)
SELECT
event_ts::date AS dt,
COUNT(DISTINCT user_id) AS active_users,
COUNT(*) AS total_events,
NOW() AS calculated_at
FROM raw_events
WHERE event_ts::date IN (SELECT dt FROM dates_to_recalc)
GROUP BY event_ts::date;
late data оконные функции пересчёт idempotent
Это задание для уровня medium. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.
Подобные задания в категории «data_engineering» регулярно дают на собеседованиях аналитика данных в Яндекс, Сбер, Ozon, Авито, Тинькофф, Wildberries, T-Bank, X5, ВТБ и других крупных IT-компаниях. Тематика: late data, оконные функции, пересчёт, idempotent.
На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.
На zasqlpython.ru есть другие задания в категории «data_engineering», продуктовые кейсы, справочник метрик, AI мок-собеседование с разбором ваших ответов.
← Все задания