Розробила пайплайн погодинної агрегації споживання електроенергії на Python / SQL / Bash + Jq, досягнувши 180 мс для наборів даних за 30 днів із різнорідних джерел JSONL.
Роботу виконано: 2025
180 ms на агрегацію місяця показань лічильників
Ситуація. Компанія обробляє великі обсяги різнорідних даних про електроенергію з кількох джерел, кожне з яких має власну частоту звітності — від погодинних до 15‑хвилинних інтервалів, а подекуди й з нерегулярними часовими мітками. Через таку мінливість важко скласти цілісний, порівнянний набір даних. Щоб енергетична аналітика була точною, ці дані потрібно нормалізувати до узгоджених погодинних значень споживання, агрегованих за зонами.
Завдання. Мета полягала в тому, щоб узяти сирі дані про події з історичного набору даних (у форматі JSONL) і перетворити їх на погодинно вирівняні показники споживання електроенергії, по одному рядку на кожну годину й зону. Зокрема, завдання охоплювало:
- Вирівнювання даних із часовими мітками до чітких погодинних інтервалів,
- Агрегування загального виробництва електроенергії в межах кожного інтервалу підсумовуванням значень міксу,
- Урахування транскордонного обміну: додавання імпорту й віднімання експорту,
- Виведення підсумкових значень у структурованому, масштабованому форматі, придатному для подальшого аналізу.
- Рішення також мало бути достатньо ефективним, щоб масштабуватися на великі часові вікна (30+ днів) і кілька країн/зон.
Дія. Для цього завдання реалізовано три варіанти рішення — на Python, JQ (для обробки JSON у командному рядку) та SQL, — кожен оптимізований під свій контекст:
Python обрали за гнучкість, зручність роботи з даними та здатність ефективно виконувати трансформації в пам’яті. На функціях чистого Python побудовано пайплайн, який:
- Парсив файли JSONL у структуровані датафрейми
- Зводив часові ряди до погодинних інтервалів
- Агрегував виробництво та обчислював чисте споживання електроенергії (виробництво + імпорт − експорт)
- Експортував результати у форматі CSV або завантажував їх у легку базу даних SQLite для перевірки.
На JQ створено швидке рішення з мінімальними залежностями для середовищ командного рядка — ланцюжок фільтрів JQ.
У PostgreSQL дані JSONL було імпортовано, створено нормалізовані таблиці та написано низку SQL‑запитів.
Для оцінки продуктивності кожне рішення було протестовано на історичних наборах даних за 1 день і за 30 днів.
Результат. Реалізація на Python виявилася найшвидшим і найкраще масштабованим рішенням і обробила:
- дані за 1 день лише за 34 мс
- набір даних за 30 днів — за 180 мс
Це підтвердило, що вона придатна для довших часових вікон і водночас вкладається в частки секунди. До того ж її код був зрозумілим і зручним у супроводі, тож його легко було розширити на обробку кількох зон або інтегрувати в ETL‑пайплайн.
Загалом підхід із кількома інструментами засвідчив гнучкість у виборі засобів, ґрунтовну оптимізацію продуктивності та надійне розв’язання задач вирівнювання за часом і агрегування в реальних пайплайнах даних про електроенергію.
Попередня робота: Спроєктувала комплексну інфраструктурну систему для науково‑дослідного інституту, що охопила 14 підрозділів, з гнучкими модулями, уніфікованими пайплайнами даних та структурованими стратегіями підтримки для довгострокового впровадження. Читати далі: Спроєктувала, розробила, впровадила та підтримувала інфраструктуру, обробку даних і картографічний застосунок безперервно протягом 2 років без вихідних, свят чи відпустки, по 10–14 годин на день. Або перегляньте повне портфоліо.
Клієнтам ми розповідаємо це як Місяць показань лічильників за 180 мілісекунд — подивитися разом з іншими кейсами.
Одна частина довшого переліку — і він увесь на цьому сайті.
Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.