En måned med måleravlesninger på 180 millisekunder
Utviklet en pipeline for timesaggregering av strømforbruk i Python / SQL / Bash + Jq som oppnådde 180 ms for datasett på 30 dager fra heterogene JSONL‑kilder.
Arbeidet utført: 2025

Foto: Nikiko / Pixabay 
Foto: dimitrisvetsikas1969 / Pixabay
180 ms for å aggregere en måned med måleravlesninger
Situasjon. Selskapet behandler store mengder heterogene strømdata fra flere datakilder, hver med sin egen rapporteringsfrekvens — fra timesintervaller til 15‑minuttersintervaller, og i noen tilfeller uregelmessige tidsstempler. Denne variasjonen gjør det utfordrende å lage et sammenhengende, sammenlignbart datasett. For å støtte presise energianalyser må disse dataene normaliseres til konsistente forbruksverdier per time, aggregert per sone.
Oppgave. Målet var å ta rå hendelsesdata fra et historisk datasett (i JSONL‑format) og konvertere dem til strømforbrukstall justert til hele timer, strukturert som én rad per time og per sone. Konkret innebar oppgaven:
- Justere tidsstemplede data til strenge timesintervaller,
- Aggregere total strømproduksjon innenfor hvert intervall ved å summere mix‑verdiene,
- Ta med utveksling over landegrensene ved å legge til import og trekke fra eksport,
- Levere de endelige verdiene i et strukturert, skalerbart format egnet for videre analyse.
- Løsningen måtte også være effektiv nok til å skalere til store tidsvinduer (30+ dager) og på tvers av flere land/soner.
Handling. For å løse oppgaven ble tre ulike varianter av løsningen implementert med Python, JQ (for JSON‑behandling på kommandolinjen) og SQL, hver optimalisert for ulike bruksområder:
Python ble valgt for sin fleksibilitet, enkle datamanipulering og evne til å håndtere transformasjoner i minnet effektivt. Med rene Python‑funksjoner ble det bygget en pipeline som:
- Parset JSONL‑filene til strukturerte datarammer
- Samplet tidsseriedataene om til timesintervaller
- Aggregerte produksjonen og beregnet netto strømforbruk (produksjon + import − eksport)
- Eksporterte resultatene som CSV eller lastet dem inn i en lettvekts SQLite‑database for inspeksjon.
JQ ble brukt til å lage en rask løsning med minimale avhengigheter for kommandolinjemiljøer, bygget som en kjede av JQ‑filtre.
I PostgreSQL ble JSONL‑dataene importert, normaliserte tabeller opprettet og en serie SQL‑spørringer skrevet.
For å evaluere ytelsen ble hver løsning benchmarket med historiske datasett på både 1 dag og 30 dager.
Resultat. Python‑implementasjonen viste seg å være den raskeste og mest skalerbare løsningen, og fullførte:
- Behandling av data for 1 dag på bare 34 ms
- Datasettet for 30 dager på 180 ms
Dette bekreftet at den egnet seg til å håndtere lengre tidsrom og samtidig holde ytelsen under ett sekund. Den ga også tydelig, vedlikeholdbar kode som lett kunne utvides til behandling av flere soner eller integreres i en ETL‑pipeline.
Samlet sett viste tilnærmingen med flere verktøy fleksibilitet i verktøybruken, sterk ytelsesoptimalisering og robust håndtering av utfordringer med tidsjustering og aggregering i reelle datapipelines for strømdata.
Se tilbake på Én infrastrukturplan for 14 avdelinger. Les videre: Et kartprodukt, håndtert fra ende til annen. Eller ta en titt på hele porteføljen.
Overfor kunder kaller vi denne En måned med måleravlesninger på 180 millisekunder — se den sammen med de andre sakene.
Ett stykke av en lengre oversikt — og den ligger i sin helhet her.
Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.

