Parquet

Wat is een Parquet-bestand?

Kolomgewijze opslag voor grote hoeveelheden. Veel kleiner en veel sneller te bevragen dan een CSV.

Wat Parquet is

Parquet is een binair formaat dat alleen iets betekent voor een programma dat het kent. Het wordt gebruikt voor archivering en gegevens tussen programma’s verplaatsen.

De extensie is .parquet en de volledige naam Apache Parquet. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar Parquet vandaan komt

Apache Software Foundation bracht het in 2013 uit.

De leeftijd is om een praktische reden interessant: hoe ouder een formaat, hoe meer programma’s de tijd hebben gehad om het te leren.

De specificatie is openbaar

Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.

Er wordt niets weggegooid

Parquet bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.

Wat het doet om zichzelf te beschermen

Parquet brengt een controlegetal, zodat een beschadigd bestand opvalt in plaats van stilzwijgend verkeerd gelezen te worden en optionele versleuteling mee.

Een versleuteld bestand moet worden ontgrendeld voordat iets het kan converteren, hier en overal elders. Een wachtwoord is niets waar een omzetter omheen kan, en aan een die dat wel beweert zou je het bestand al helemaal niet moeten geven.

Wat Parquet opent

pandas, Apache Spark en DuckDB lezen het, en de meeste programma’s van dezelfde soort ook.

Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.

Het in de browser openen

Geen enkele browser leest het.

Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.

Het is een afleverformaat

Parquet is bedoeld om door te geven, niet om in te werken. Er een bewerken kan en is zelden prettig; de verstandige weg loopt via de bron en een nieuwe export.

Wat er misgaat

De terugkerende klachten: buiten het eigen terrein is de ondersteuning ongelijk.

Niets daarvan is een reden om het formaat te mijden. Het zijn de dingen die je beter kent voordat een ervan je verrast, en dat is een andere en een nuttigere bewering.

Het slaat kolommen op, geen rijen

Een CSV schrijft één record tegelijk: naam, datum, land, bedrag, dan het volgende record. Parquet schrijft één kolom tegelijk: elke naam samen, dan elke datum, dan elk land.

Die enkele herschikking is het hele formaat. Het klinkt als een archiveringsvoorkeur en verandert de economie van alles stroomafwaarts, want een query die twee van de vijftig kolommen wil, kan precies die twee lezen en de rest overslaan.

Waarom het zoveel kleiner is

Waarden in een kolom lijken op elkaar — datums lijken op datums, landcodes herhalen zich — en die gelijkenis is waar compressie op teert. Parquet codeert ook slim vóór het comprimeert: een kolom met weinig verschillende waarden wordt een woordenboek met kleine gehele getallen.

Het resultaat is routinematig vijf tot tien keer kleiner dan dezelfde data als CSV, soms veel meer bij brede tabellen met repetitieve kolommen. Dat is een directe besparing op opslag en, belangrijker, op de overdrachtstijd van alles dat het leest.

De types zitten in het bestand

Een CSV heeft helemaal geen types, dus elke consument gokt — en daar verdwijnen voorloopnullen en worden identificatienummers datums. Parquet registreert het type van elke kolom in zijn eigen schema.

De data komt dus aan met de betekenis die ze had. Niets wordt afgeleid, niets hangt af van een locale, en een kolom postcodes blijft een kolom postcodes. Voor alles wat tussen systemen reist, is dit een groter praktisch voordeel dan de compressie.

De metadata laat query’s werk overslaan

Parquet is georganiseerd in rijgroepen, en elk registreert statistieken per kolom — het minimum, het maximum, hoeveel nulls. Een query die op een datumbereik filtert kan die statistieken lezen en een hele rijgroep overslaan zonder iets te decomprimeren.

Dat is waarom een query over een grote Parquet-dataset dramatisch sneller kan zijn dan dezelfde query over CSV. Het verklaart ook waarom een dataset partitioneren op datum in een mapstructuur zo goed werkt: de engine slaat hele bestanden over voordat hij begint.

Waar het slecht in is

Eén record lezen. Een enkele rij reconstrueren betekent een waarde uit elke kolom verzamelen, precies het toegangspatroon waar de indeling niet voor gebouwd is. Parquet is een analyseformaat, geen database.

Toevoegen. Een bestand wordt in één keer geschreven, met de statistieken en footer aan het eind berekend, dus een rij toevoegen betekent herschrijven. Streamende data komt daardoor als veel kleine bestanden binnen en wordt later gecompacteerd.

Er eentje openen zonder dataplatform

De drempel is lager dan vroeger. DuckDB leest een Parquet-bestand rechtstreeks met één SQL-query en installeert in seconden. Python met pandas of Polars leest er eentje in één regel.

Omzetten naar CSV is de andere route, juist wanneer een collega de data in een rekenblad nodig heeft — met als gevolg dat de types weer gokwerk worden en het bestand meerdere keren groter. Bewaar de Parquet als bron.

Waar je het tegenkomt

Overal waar data op schaal geanalyseerd wordt: datameren op cloudopslag, Spark en Databricks, Snowflake- en BigQuery-exports, dbt-pijplijnen, en steeds vaker gewone Python-analyse waar het CSV stilletjes verving als standaard om een dataframe op te slaan.

Het wordt ook steeds meer het formaat waarin overheidsinstanties en onderzoeksprojecten grote datasets publiceren, precies omdat het alternatief — een CSV van twee gigabyte die niemand in een rekenblad kan openen — niemand dient.

De gegevens, op één plek

Kenmerken en herkomst van het formaat Parquet.
Extensie.parquet
Mediatypeapplication/vnd.apache.parquet
Uitgegeven doorApache Software Foundation
Voor het eerst gepubliceerd2013