Apache Parquet: wie die Aufzeichnung aufgebaut ist, damit Superintelligenz das ganze Unternehmen lesen kann

Ein kleiner Serverraum im eigenen Haus, von der Tür aus gesehen, zwei Racks mit einer dünnen Linie blauer Statuslichter, ein Ingenieur von hinten mit einem Tablet, das abstrakte blau-graue Balkenformen zeigt, kühles Deckenlicht und ein sauberer Betonboden

Ein Planungsagent wird um sieben Uhr morgens gefragt, welche offenen Aufträge gefährdet sind, weil ihre Artikel eine Qualitätssperre haben. Die Antwort braucht drei Felder aus dem Auftragsdatensatz, zwei aus dem Prüfdatensatz und eines aus dem Artikelstamm, über alles Offene im Unternehmen. Er braucht sie, bevor sich der Planer hinsetzt, und er braucht sie um neun noch einmal, wenn sich der Plan ändert. Niemand bemerkt die Frage, solange sie billig ist. Alle bemerken es, wenn die Agenten, die sie stellen, der Grund sind, warum die Server aufgerüstet wurden.

Superintelligenz liest die Aufzeichnung weit häufiger als Menschen, und in einem souveränen System tut sie das auf Hardware, die das Unternehmen bezahlt. Der Aufbau der Dateien, die die Aufzeichnung halten, entscheidet daher über etwas, das wie ein Leistungsdetail aussieht und in Wahrheit ein Kostenfaktor des Unternehmensbetriebs ist. In Hurukans Datenschicht, die im Aufbau ist, soll die Aufzeichnung in Apache Parquet gespeichert werden. Dieser Text handelt davon, was diese Wahl bringt und was sie verlangt.

Was in einer Parquet-Datei steckt

Parquet speichert eine Tabelle Spalte für Spalte. Eine Datei hält eine Anzahl Zeilengruppen; jede Zeilengruppe hält einen Block je Spalte; jeder Block ist eine Folge von Seiten. Die Metadaten, einschließlich Schema und Position jedes Blocks, werden am Ende geschrieben, sodass ein Schreiber die Datei in einem Durchgang erzeugt und ein Leser zuerst den Fußbereich öffnet und dann direkt zu den Bytes geht, die er braucht. Die Spezifikation steht bei Version 2.14.0 (Projektblog, geprüft am 21. Oktober 2026).

Für die Kosten zählt die Reihenfolge dessen, was ein Leser überspringen kann:

Spalten, nach denen er nicht gefragt hat. Der Planungsagent will sechs Felder; die Datei mag sechzig halten. Die anderen vierundfünfzig werden nie gelesen.

Zeilengruppen, die die Antwort nicht enthalten können. Jeder Spaltenblock trägt Statistiken, den Minimal- und Maximalwert und die Zahl der Nullwerte. Geht die Frage um eine Artikelfamilie und ist die Datei nach Artikel sortiert, werden die meisten Zeilengruppen allein aus dem Fußbereich ausgeschlossen.

Seiten innerhalb eines Blocks. Der Seitenindex hält Minimum und Maximum je Seite fest und wo jede Seite beginnt, sodass der Leser selbst innerhalb einer gewählten Zeilengruppe zu den passenden Seiten springt.

Werte, die es nicht gibt. Ein Bloom-Filter je Spaltenblock beantwortet „ist diese Auftragsnummer hier überhaupt drin”, ohne den Block zu lesen — das, was eine Punktsuche auf einem Feld mit hoher Kardinalität braucht.

Was übrig bleibt, wird gelesen, und was gelesen wird, ist klein, weil Spalten gut komprimieren: Wiederholte Werte werden zu Wörterbucheinträgen, Läufe zu Zählern, und ein allgemeiner Codec erledigt den Rest. Die Kodierungen und Codecs sind spezifiziert, mit Snappy, GZIP, ZSTD und Brotli unter den Codecs und dem neueren LZ4_RAW, das die ältere LZ4-Rahmung ersetzt.

Warum der Aufbau eine Souveränitätsfrage ist

Eine verwaltete Plattform verbirgt die Kosten einer schlecht aufgebauten Aufzeichnung hinter einer Monatsrechnung. Auf der eigenen Infrastruktur des Unternehmens, wo ein souveränes Betriebssystem lebt, sind die Kosten sichtbar als Prozessoren, Platten und die Zeit, die ein Agent wartet. Dieselbe Frage, gestellt an eine Aufzeichnung, die nach dem Feld sortiert ist, nach dem sie filtert, mit Zeilengruppen vernünftiger Größe und Wörterbuchkodierung, wo sich Werte wiederholen, berührt einen Bruchteil der Bytes, die sie sonst berühren würde. Die Entscheidung über den Aufbau ist eine Entscheidung darüber, wie viele Fragen das Unternehmen seinen Agenten erlauben kann. Der weitere Entwurf, einschließlich der Frage, warum die Aufzeichnung vom laufenden Zustand der Module getrennt ist, steht in Laufender Zustand und Aufzeichnung.

Parquet ist auch das Format, das jede Engine liest. Spark, Trino, DuckDB, Snowflake, BigQuery, Microsoft Fabric und die Analysebibliotheken öffnen es alle nativ. Eine in Parquet gespeicherte Aufzeichnung ist eine, die morgen eine andere Engine lesen kann — die eine Hälfte eines Ausstiegs; die andere Hälfte, die Tabellenmetadaten über den Dateien, behandelt Der Prüfpfad ist eine Tabelle.

Typen, die die Aufzeichnung brauchen wird

Die Spezifikation ist in Richtung der Formen gewachsen, die eine Unternehmensaufzeichnung tatsächlich hat. Version 2.11 fügte den Typ VARIANT für halbstrukturierte Werte hinzu, die halbfertigen Attribute, die in keine feste Spalte passen, sowie GEOMETRY und GEOGRAPHY für Orte; 2.12 legte fest, wie VARIANT-Werte zum schnelleren Lesen in typisierte Spalten zerlegt werden dürfen; 2.14 fügte einen Typ FILE hinzu (Versionshinweise im Projektblog, Typdefinitionen in LogicalTypes, geprüft am 21. Oktober 2026). Für eine Aufzeichnung, die eine Lieferadresse, einen flexiblen Satz Prüfattribute und einen Verweis auf ein gescanntes Dokument in derselben Zeile halten muss, ist das nichts Exotisches. Was eine bestimmte Engine davon liest, muss je Engine geprüft werden, und der Entwurf setzt voraus, dass diese Prüfung geschieht, bevor ein Typ verwendet wird, nicht danach.

Was Agenten vorschlagen, was Menschen entscheiden

Ein Agent, der die an die Aufzeichnung gestellten Fragen beobachtet, ist gut aufgestellt, ihren Aufbau zu verbessern: Er kann sehen, dass die meisten Filter auf der Artikelfamilie liegen, dass die Dateien einer Tabelle klein und zahlreich geworden sind, seit ein Konnektor jede Minute schreibt, oder dass das Wörterbuch einer Spalte nicht mehr passt. In Hurukans Entwurf werden diese Beobachtungen zu Vorschlägen — eine Sortierreihenfolge, ein Verdichtungsplan, ein Codec-Wechsel — mit beigefügtem Beleg, und der Vorschlag wird aufgezeichnet, ob er angenommen wird oder nicht.

Was ein Agent nicht entscheidet, ist, wie lange die Aufzeichnung jede Art von Zeile behält, welche Zeilen sie verlassen, wenn eine Person die Entfernung ihrer Daten verlangt, und ob das Neuschreiben eines Jahres an Dateien, was Verdichtung und Neusortierung beide sind, die Prozessorzeit dieser Woche wert ist. Das sind Entscheidungen über Pflicht und Kosten, von einem Menschen getroffen und wie jede andere in die Aufzeichnung geschrieben.

Ein Test, den Sie heute machen können

Nehmen Sie den einen Bericht oder das eine Modell in Ihrem Unternehmen, das am meisten Geschichte liest. Finden Sie zwei Dinge heraus: in welchem Format seine Quelldateien gespeichert sind und ob sie je jemand nach irgendetwas sortiert hat. Lautet die Antwort CSV oder Datenbankexport, liest jede Frage jedes Byte. Sind die Dateien spaltenorientiert, aber unsortiert und nie verdichtet, ist die erste Verbesserung billig und niemand ist dafür zuständig. Die Seite zur Datenschicht beschreibt, wo die Aufzeichnung in Hurukan sitzt; die Übersicht zeigt, was sie liest.