Розробила пайплайн погодинної агрегації споживання електроенергії на 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 мілісекунд — подивитися разом з іншими кейсами.
Одна частина довшого переліку — і він увесь на цьому сайті.
Кожен запис написано однаково: ситуація, завдання, що ми зробили і що змінилося.