Обработка late-arriving data

medium data_engineering Общие

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

**Компания:** Тинькофф

**Контекст:** Мобильное приложение отправляет события с задержкой (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

Подсказки

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

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

Какой уровень знаний нужен для задачи "Обработка late-arriving data"?

Это задание для уровня medium. Senior-уровень — глубокое понимание темы, опыт решения нестандартных задач, обсуждение trade-off на собеседовании.

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

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

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

На реальном собеседовании на подобную задачу отводится 30-60 минут с обсуждением подходов, оптимизаций и trade-off. Для тренировки рекомендуем сначала решить самостоятельно, потом сверить с эталонным решением и подсказками.

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

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

← Все задания