TGViewer
Симулейтив Симулейтив @simulative_official · 7.44K subscribers
Post #2683 1.54K
Проблемы снэпшотов: не все данные одинаково полезны

Приветствую! Георгий Семенов, ментор потока «Инженер данных», на связи 👋

Ты — Data Engineer. Перед тобой стоит задача: ежедневно собирать из внешнего сервиса статистику по рекламным кампаниям твоих клиентов (дальше будем называть РК).

У сервиса есть два метода API:

🟠 /adv_list возвращает список всех РК и их статусы на момент запроса (aka снэпшот). На вход принимает ID клиента.
🟠 /adv_stat возвращает статистику по РК за указанный день. На вход принимает ID РК и дату.

Однако у клиентов много РК в статусе «неактивный», по которым не бывает статистики за день. А нам не хочется делать лишние запросы к API — есть лимиты, которые сильно замедляют процесс. Для иллюстрации: у одного клиента 150 активных РК и 1750 неактивных. Активные мы грузим за 5 минут, а все вместе — час. Поэтому хотим запрашивать статистику только по активным РК.

Так ты и делаешь — сперва грузишь список, из него берёшь только активные РК и по ним сразу статистику за день. Но есть нюанс.

Проблема №1. Если РК будет активной в течение дня, но станет неактивной, когда мы придём за данными, то мы не получим статистику по этой РК за этот день, хотя она есть.


Проблема №2. Допустим, что-то пошло не так и загрузка сломалась, а мы заметили это только через несколько дней. Естественно, мы хотим залить провалы за эти дни, чтобы статистика была полной. Но /adv_list вернёт только текущие статусы.


Благо, в твоём случае нашлось неплохое решение. Метод /adv_list возвращает не только текущий статус, но и таймстэмп последнего изменения РК. Поэтому для загрузки статистики за пропущенные даты ты можешь отобрать РК по следующему условию:

статус = "активный" или последнее изменение >= {дата_провала}


Иначе тебе пришлось бы выбирать между сильным снижением скорости импорта и потенциальной частичной потерей данных.

Вывод: импорта снэпшотов стоит избегать, особенно если от них зависят другие расчёты. Снэпшоты теряют информацию о промежуточных изменениях, и на практике чаще всего занимают значительно больше места, чем логи изменений тех же объектов.
Но если у тебя нет влияния на источник, приходится работать с тем, что дают. И в таком случае заранее тщательно продумывай зависимости, чтобы не было проблем.

🤔 Если вы не до конца поняли пост, или наоборот, поняли, и хотите узнать ещё про разные виды датасетов, партицирование, бэкфиллинг и другие приколы процессов обработки данных — жду вас завтра, 22 октября, на моём бесплатном вебинаре.


P. S. Можно усложнить решение задачи, чтобы ещё сильнее уменьшить потенциальное количество запросов к /adv_stat. Пишите свои варианты в комментариях.

📊 Simulative
  • ❤ 3
  • 🔥 3
  • 👍 1
More from @simulative_official
  1. Oct 13, 2026💻💻💻💻💻 Падение продаж: как аналитик превращает размытый вопрос в расследование? Руково…
  2. Oct 13, 2026💻 Почему ваш SQL-запрос выполняется не так, как вы его написали? Кажется логичным, что ба…
  3. Oct 12, 2026#проанализировали_и_поняли
  4. Oct 11, 2026❗️ Перенос вебинара с Евгением Буториным Друзья, к сожалению, по техническим причинам пере…
  5. Oct 9, 2026💻💻💻💻💻 Как выбрать своё направление в аналитике? Решаешь войти в аналитику, открываешь…
  6. Oct 9, 2026🔍 Найдите пять проблем в этом выводе Привет! На связи Ева Панкратова, ментор курса «Анали…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →