# Byggde en pipeline som aggregerar elförbrukning per timme i Python / SQL / Bash + Jq och nådde 180 ms för datamängder på 30 dagar från heterogena JSONL‑källor.

2025

**Situation.** Företaget bearbetar stora volymer heterogena eldata från flera datakällor, var och en med sin egen rapporteringsfrekvens — från timintervall till 15‑minutersintervall och i vissa fall oregelbundna tidsstämplar. Variationen gör det svårt att skapa ett sammanhängande och jämförbart dataset. För att möjliggöra korrekt energianalys måste dessa data normaliseras till konsekventa förbrukningsvärden per timme, aggregerade per zon.

**Uppgift.** Målet var att ta rå händelsedata från ett historiskt dataset (i JSONL‑format) och omvandla dem till elförbrukningssiffror justerade till hela timmar, strukturerade som en rad per timme och zon. Konkret innebar uppgiften att:

- justera tidsstämplade data till strikta timintervall,
- aggregera den totala elproduktionen inom varje intervall genom att summera värdena i produktionsmixen,
- ta med gränsöverskridande utbyte genom att lägga till import och dra av export,
- leverera slutvärdena i ett strukturerat, skalbart format som lämpar sig för vidare analys.
- Lösningen behövde dessutom vara tillräckligt effektiv för att skala till långa tidsfönster (över 30 dagar) och till flera länder/zoner.

**Handling.** För att lösa uppgiften implementerades tre olika varianter av lösningen, i Python, JQ (för JSON‑bearbetning på kommandoraden) och SQL, var och en optimerad för olika sammanhang:

Python valdes för sin flexibilitet, sin smidiga datahantering och sin förmåga att effektivt hantera transformationer i minnet. Med rena Python‑funktioner byggdes en pipeline som:
- tolkade JSONL‑filerna till strukturerade dataframes
- omsamplade tidsseriedata till timintervall
- aggregerade produktionen och beräknade nettoelförbrukningen (produktion + import − export)
- exporterade resultaten som CSV eller läste in dem i en lättviktig SQLite‑databas för inspektion.

JQ användes för att skapa en snabb lösning med minimala beroenden för kommandoradsmiljöer, byggd som en kedja av JQ‑filter.

JSONL‑data importerades till PostgreSQL, där normaliserade tabeller skapades och en serie SQL‑frågor skrevs.

För att utvärdera prestandan benchmarkades varje lösning med historiska dataset över både 1 dag och 30 dagar.

**Resultat.** Python‑implementationen visade sig vara den snabbaste och mest skalbara lösningen och klarade:

- bearbetning av 1 dags data på bara 34 ms
- ett dataset på 30 dagar på 180 ms

Det bekräftade att den lämpar sig för längre tidsperioder med bibehållen prestanda under en sekund. Den gav också tydlig och underhållbar kod som enkelt kunde byggas ut till bearbetning av flera zoner eller integreras i en ETL‑pipeline.

Sammantaget visade angreppssättet med flera verktyg på flexibilitet i verktygsvalet, stark prestandaoptimering och robust hantering av tidsjustering och aggregering i verkliga datapipelines för eldata.

---

- Roll: Plattforms- och dataingenjör
- Kategorier: [Databaser](https://data.engineer.company/sv/categories/databases/), [PostgreSQL](https://data.engineer.company/sv/categories/postgresql/), [SQL](https://data.engineer.company/sv/categories/sql/), [Data engineering](https://data.engineer.company/sv/categories/data-engineering/), [Datapipelines (ETL/ELT)](https://data.engineer.company/sv/categories/data-pipelines/), [Dataanalys](https://data.engineer.company/sv/categories/data-analytics/), [Automatisering och CI/CD](https://data.engineer.company/sv/categories/automation/), [Prestandaoptimering](https://data.engineer.company/sv/categories/performance/), [Python](https://data.engineer.company/sv/categories/python/)
- Tjänster: [Optimering av databasprestanda](https://data.engineer.company/sv/services/database-performance/), [Utveckling av datapipelines (ETL/ELT)](https://data.engineer.company/sv/services/data-pipeline-development/), [Dataanalys och BI‑dashboards](https://data.engineer.company/sv/services/data-analytics-bi/)

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