# Розробила пайплайн погодинної агрегації споживання електроенергії на Python / SQL / Bash + Jq, досягнувши 180 мс для наборів даних за 30 днів із різнорідних джерел JSONL.

2025

**Ситуація.** Компанія обробляє великі обсяги різнорідних даних про електроенергію з кількох джерел, кожне з яких має власну частоту звітності — від погодинних до 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‑пайплайн.

Загалом підхід із кількома інструментами засвідчив гнучкість у виборі засобів, ґрунтовну оптимізацію продуктивності та надійне розв'язання задач вирівнювання за часом і агрегування в реальних пайплайнах даних про електроенергію.

---

- Роль: Інженер платформи та даних
- Категорії: [Бази даних](https://data.engineer.company/uk/categories/databases/), [PostgreSQL](https://data.engineer.company/uk/categories/postgresql/), [SQL](https://data.engineer.company/uk/categories/sql/), [Інженерія даних](https://data.engineer.company/uk/categories/data-engineering/), [Пайплайни даних (ETL/ELT)](https://data.engineer.company/uk/categories/data-pipelines/), [Аналітика даних](https://data.engineer.company/uk/categories/data-analytics/), [Автоматизація та CI/CD](https://data.engineer.company/uk/categories/automation/), [Оптимізація продуктивності](https://data.engineer.company/uk/categories/performance/), [Python](https://data.engineer.company/uk/categories/python/)
- Послуги: [Оптимізація продуктивності баз даних](https://data.engineer.company/uk/services/database-performance/), [Розробка пайплайнів даних (ETL/ELT)](https://data.engineer.company/uk/services/data-pipeline-development/), [Аналітика даних та BI‑дашборди](https://data.engineer.company/uk/services/data-analytics-bi/)

<https://data.engineer.company/uk/portfolio/engineered-hourly-electricity-consumption-aggregation-pipeline-in-python-4/>
