---
title: "Parquet og Avro: hændelsen mellem modulerne og registret, superintelligensen læser"
url: "https://hurukan.com/da/blog/parquet-og-avro-haendelsen-og-registret"
description: "En hændelse rejser mellem moduler som en række med en kontrakt og hviler i registret som kolonner. Hvorfor Avro bærer den første og Parquet den anden."
---

# Parquet og Avro: hændelsen mellem modulerne og registret, superintelligensen læser

11\. september 2026·5 min. læsning·Redaktionen

Et logistikkontor set bagfra en operatør ved et ståbord: på venstre skærm en enkelt abstrakt blågrå formular, på højre en bred abstrakt tabel med tynde kolonner, en tynd blå LED-liste langs bordkanten, morgenlys fra et højt vindue

En varemodtagelse bekræftes ved rampen. Inden for samme sekund skal salgsmodulet vide, at restordren kan afsendes, økonomi skal have fakturamatchningen i gang, og lagermodulet skal flytte beholdningen. Hver af dem vil have hele modtagelsen: leverandør, vare, mængde, parti, hvem der bekræftede. Tre måneder senere stiller økonomiagenten et andet spørgsmål: hvor ofte kom leverancer fra denne leverandør for små i de seneste to år. Den vil have to kolonner ud af en million rækker, og den vil have dem på sekunder.

Det er to forskellige former af den samme kendsgerning. Den første er en række, der rejser. Den anden er en kolonne, der hviler. Et operativsystem for virksomheden skal gemme begge, og det er en fejl at gemme dem på samme måde. I Hurukans [datalag](https://hurukan.com/da/system/data), som er under opbygning, er designet, at en hændelse mellem moduler bæres af Apache Avro, og at det register, superintelligensen læser, er indrettet i Apache Parquet. Denne tekst forklarer, hvorfor opdelingen findes, og hvad hver side betaler for.

## To spørgsmål, to layouts

Et filformat afgør, hvordan én fil ordner sine bytes: om posterne ligger efter hinanden, eller om alle værdier i ét felt ligger sammen, hvordan de komprimeres, og hvor beskrivelsen af deres typer bor.

**Rækkelayout.** Hver post skrives hel: hvert felt i denne modtagelse, så hvert felt i den næste. At skrive én post er billigt, at læse én post er billigt, og at læse kun mængden på tværs af en million modtagelser betyder at læse alle de andre felter også, fordi de står i vejen.

**Kolonnelayout.** Alle mængder ligger sammen, alle leverandøridentifikatorer ligger sammen. Et spørgsmål om to felter rører to smalle striber af filen og springer resten over. At skrive en enkelt post er besværligt, fordi en fil skal lukkes, før nogen kan læse den, så kolonner skrives i portioner.

Avro er rækkelayoutet med et skema, der rejser med dataene. Parquet er kolonnelayoutet med statistik, der lader en læser springe det over, den ikke har brug for. Ingen af dem kender til den anden, og ingen af dem ved, om den hører til en tabel; det er arbejdet for et tabelformat over dem, beskrevet i [den levende tilstand og registret](https://hurukan.com/da/blog/den-levende-tilstand-og-registret-to-hukommelser).

## Hændelsen: en række med en kontrakt

Når modtagelsen forlader lagermodulet, er den en besked. Hvert modul, der læser den, skal være enigt om, hvad felterne betyder, og den enighed skal overleve den dag, nogen tilføjer et felt. [Avro](https://avro.apache.org/docs/1.12.0/specification/) bærer den enighed med beskeden: skemaet er JSON, posten er en kompakt binær række, og specifikationen fastlægger, hvordan en læser med én version af skemaet opløser en post skrevet med en anden. Et felt, læseren ikke kender, springes over. Et felt, læseren forventer, og skriveren ikke sendte, tager standardværdien fra læserens skema, eller læsningen fejler og siger det. Den aktuelle udgivelse er 1.12.2 ([projektets blog](https://avro.apache.org/blog/), kontrolleret den 21. oktober 2026).

I et system, hvor agenter udvider moduler, er den opløsningsregel forskellen mellem en ændring, der er sikker, og én, der stopper et modul klokken tre om natten. Hvordan en skemaændring bevæger sig gennem forslag, kompatibilitetstjek og godkendelse, er emnet for [Apache Avro: kontrakten mellem moduler](https://hurukan.com/da/blog/apache-avro-kontrakten-mellem-moduler).

Hændelsen forbliver ikke en hændelse. Når den er accepteret af de moduler, der har brug for den, skrives den samme modtagelse ind i registret, og derfra vil den blive læst på en helt anden måde.

## Registret: kolonner, som superintelligensen læser

Superintelligensen spørger ikke efter én modtagelse. Den spørger efter et mønster på tværs af alle modtagelser fra én leverandør, alle ordrer i ét kvartal, hver afvigelse på én varerevision. Det er spørgsmål om få felter på tværs af mange rækker, og det er det, [Parquet](https://parquet.apache.org/docs/file-format/) er bygget til: en fil opdeles i rækkegrupper, hver rækkegruppe i én bid pr. kolonne, hver bid i sider, med en sidefod, der beskriver, hvor alt er. En læser beder om to kolonner og modtager to kolonner. Hver rækkegruppe bærer minimums- og maksimumsværdier, så hele strækninger af filen springes over, når spørgsmålet gælder én leverandør. Formatspecifikationen er i version 2.14.0 ([projektets blog](https://parquet.apache.org/blog/), kontrolleret den 21. oktober 2026).

Pointen for et suverænt system er omkostninger. Registret bor på den infrastruktur, virksomheden vælger, og hvert spørgsmål, superintelligensen stiller, betales i læste bytes og processortid på den infrastruktur. Et register indrettet i kolonner, komprimeret med ordbog og sorteret efter de felter, de fleste spørgsmål filtrerer på, er et register, virksomheden har råd til at lade sine agenter læse, så ofte de har brug for det. Hvordan layoutet inde i én fil bliver til den omkostning, behandles i [Apache Parquet: sådan er registret indrettet](https://hurukan.com/da/blog/apache-parquet-saadan-er-registret-indrettet).

## Hvor opdelingen afgøres

Kendsgerningen er

Form

Format i datalaget

På vej mellem moduler eller ind fra en konnektor

én hel post, nu

Avro, under et registreret skema

Hvilende i registret, læst af agenter og mennesker

mange poster, få felter

Parquet, inde i et tabelformat

Ankommer én ad gangen, men læses i bulk senere

begge, i rækkefølge

Avro ind, samlet i portioner til Parquet

Den tredje række er der, hvor det meste af ingeniørarbejdet ligger. Hændelser ankommer én ad gangen; Parquet vil have portioner. Noget skal samle et minut eller en time af hændelser, skrive dem som én fil og fortælle tabellen, hvilken fil der er ny. Gør det for ofte, og registret bliver en bunke af bittesmå filer, der er langsom at læse. Gør det for sjældent, og den agent, der har brug for dagens modtagelser, læser gårsdagens register. Intervallet er en beslutning om, hvilke spørgsmål der skal være friske, og det er en beslutning for et menneske, ikke en standard.

## Hvad en agent må ændre her, og hvad den ikke må

Agenter udvider Hurukan, og datalaget er ingen undtagelse. En agent kan foreslå et nyt felt på modtagelseshændelsen, udarbejde det batchjob, der lander hændelser i registret, eller foreslå, at en tabel sorteres efter leverandør, fordi den seneste måneds spørgsmål filtrerede på det. Hvert af disse er et forslag med sin begrundelse vedhæftet, og hvert registreres.

To ting bliver hos mennesker. Selve kontrakten: en ændring af et hændelsesskema er en ændring af aftalen mellem moduler, og ejeren af det modtagende modul godkender den. Og registrets form: hvor længe hændelser gemmes, hvilke felter der forlader registret ved en anmodning om sletning, og hvor ofte portionerne lukkes. De afgør omkostning og forpligtelse, og en agent skriver ikke under på nogen af delene.

## En test, du kan lave i dag

Tag én kendsgerning, der i dag bevæger sig mellem to systemer i din virksomhed, en ordrebekræftelse eller en varemodtagelse. Skriv tre ting ned: hvor dens feltliste er defineret, hvem der ville få besked, hvis et felt blev tilføjet, og hvor den samme kendsgerning senere læses i bulk til en rapport.

Hvis feltlisten er defineret to steder, findes kontrakten ikke endnu. Hvis ingen ville få besked, vil det næste tilføjede felt stille ødelægge noget. Hvis bulklæsningen sker mod det samme lager, der modtager hændelserne, deler de to former ét layout, og en af dem betaler for det. Siden om [datalaget](https://hurukan.com/da/system/data) beskriver, hvor hver form er tænkt at bo; [oversigten over Hurukan](https://hurukan.com/da) viser lagene omkring det.

-   Apache Parquet
-   Apache Avro
-   hændelseskontrakter
-   registret
-   datalaget

## Læs videre

-   [Én identitet for mennesker og agenter: hvem må hvad](https://hurukan.com/da/blog/en-identitet-for-mennesker-og-agenter)
-   [Den levende tilstand og registret: to hukommelser i et operativsystem for virksomheden](https://hurukan.com/da/blog/den-levende-tilstand-og-registret-to-hukommelser)