Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
Parquet
Stockage en colonnes pour les grands volumes. Bien plus léger et plus rapide à interroger qu’un CSV.
Parquet
Parquet est un format binaire, qui ne veut rien dire hors d’un programme qui le connaît. Il est utilisé pour l’archivage et l’échange entre programmes.
L’extension est .parquet et le nom complet Apache Parquet. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.
Apache Software Foundation l’a publié en 2013.
L’âge est utile à connaître pour une raison pratique : plus un format est ancien, plus les programmes ont eu le temps de l’apprendre.
Elle est publiée intégralement : n’importe qui peut l’implémenter à partir du document plutôt qu’en l’observant, et c’est pourquoi ce format apparaît dans tant de programmes et pourquoi des fichiers écrits il y a vingt ans s’ouvrent encore. Une spécification publiée n’est pas pour autant libre de redevances : quand un format enveloppe un codec, les brevets sont une question à part, que la norme ne tranche pas.
Parquet enregistre son contenu à l’identique. Le réenregistrer ne change rien : vous pouvez l’ouvrir, le modifier et le réenregistrer autant de fois que vous voulez sans accumuler de dégâts, et c’est ce qui en fait un format de travail plutôt qu’un format de livraison.
Parquet porte une somme de contrôle, pour qu’un fichier abîmé soit détecté au lieu d’être mal lu en silence et un chiffrement facultatif.
Un fichier chiffré doit être déverrouillé avant que quoi que ce soit puisse le convertir, ici comme ailleurs. Un mot de passe n’est pas quelque chose qu’un convertisseur peut contourner, et à celui qui prétendrait le faire il ne faudrait surtout pas confier le fichier.
pandas, Apache Spark et DuckDB le lisent, comme la plupart des programmes du même genre.
Quand un fichier ne s’ouvre pas, le format est rarement en cause : le plus souvent, c’est le programme qui est plus ancien que lui. Convertir vers quelque chose de plus ancien est le contournement fiable, et c’est à cela que sert le reste de ce site.
Aucun navigateur ne le lit.
C’est de loin la raison la plus fréquente de le convertir : non pas que le format soit mauvais, mais que l’endroit où vous voulez montrer le fichier ne sache pas le lire.
Parquet est fait pour être transmis, pas pour travailler dedans. Modifier un tel fichier est possible et rarement agréable ; la voie raisonnable passe par la source et un nouvel export.
Les reproches qui reviennent : hors de son terrain, la prise en charge est inégale.
Rien de tout cela n’est une raison d’éviter le format. Ce sont les choses à connaître avant que l’une d’elles vous surprenne, ce qui est une affirmation différente et plus utile.
Un CSV écrit un enregistrement à la fois : nom, date, pays, montant, puis l’enregistrement suivant. Parquet écrit une colonne à la fois : tous les noms ensemble, puis toutes les dates, puis tous les pays.
Ce réarrangement unique est tout le format. Cela ressemble à une préférence de classement et cela change l’économie de tout ce qui est en aval, parce qu’une requête qui veut deux colonnes sur cinquante peut lire exactement ces deux-là et sauter le reste, et parce qu’une colonne de valeurs similaires se compresse bien mieux qu’une ligne de valeurs sans rapport.
Les valeurs d’une colonne se ressemblent — les dates ressemblent à des dates, les codes pays se répètent, les montants partagent un ordre de grandeur — et c’est cette similarité dont la compression se nourrit. Parquet encode aussi astucieusement avant de compresser : une colonne avec peu de valeurs distinctes devient un dictionnaire et une liste de petits entiers, et une suite de valeurs identiques devient un compte.
Le résultat est couramment cinq à dix fois plus petit que les mêmes données en CSV, et parfois bien plus pour des tables larges aux colonnes répétitives. C’est une économie directe sur le stockage et, plus important encore, sur le temps de transfert de tout ce qui le lit.
Un CSV n’a aucun type, donc chaque consommateur devine — et c’est là que les zéros initiaux disparaissent et que les identifiants se transforment en dates. Parquet enregistre le type de chaque colonne dans son propre schéma : ceci est un entier de 64 bits, ceci est une chaîne, ceci est un horodatage avec fuseau, ceci est un décimal avec telle précision.
Les données arrivent donc en signifiant ce qu’elles signifiaient. Rien n’est inféré, rien ne dépend d’une locale, et une colonne de codes postaux reste une colonne de codes postaux. Pour tout ce qui circule entre systèmes, c’est un avantage pratique plus grand que la compression.
Parquet est organisé en row groups, et chacun enregistre des statistiques par colonne — le minimum, le maximum, combien de nulls. Une requête qui filtre sur une plage de dates peut lire ces statistiques, voir qu’un row group entier tombe hors de la plage, et le sauter sans rien décompresser.
C’est pourquoi une requête sur un grand jeu Parquet peut être considérablement plus rapide que la même requête sur CSV, au-delà de la lecture de moins de colonnes. Cela explique aussi pourquoi partitionner un jeu de données par date dans une structure de répertoires — un dossier par jour — fonctionne si bien : le moteur saute des fichiers entiers avant même de commencer.
Lire un enregistrement. Reconstruire une seule ligne signifie aller chercher une valeur dans chaque colonne, ce qui est précisément le patron d’accès pour lequel la disposition n’est pas faite. Parquet est un format analytique, pas une base de données.
Ajouter des données. Un fichier s’écrit en entier, avec ses statistiques et son pied de page calculés à la fin, donc ajouter une ligne signifie réécrire ou écrire un nouveau fichier. Les données en continu arrivent donc sous forme de nombreux petits fichiers et sont compactées plus tard, ce qui est une partie normale de l’exploitation d’un data lake et une nuisance si personne ne l’a prévu.
Et être regardé. C’est binaire — un éditeur de texte ne montre rien d’utile, et inspecter un fichier demande un outil.
La barrière est plus basse qu’elle ne l’était. DuckDB lit un fichier Parquet directement avec une seule requête SQL et s’installe en quelques secondes. Python avec pandas ou Polars en lit un en une ligne. Plusieurs visualiseurs de bureau gratuits l’ouvrent comme un tableur.
Convertir en CSV est l’autre voie, et la bonne quand un collègue a besoin des données dans un tableur — en acceptant que les types redeviennent des devinettes et que le fichier devienne plusieurs fois plus gros. Gardez le Parquet comme source et générez le CSV pour la personne qui l’a demandé.
Partout où des données sont analysées à grande échelle : lacs de données sur du stockage cloud, Spark et Databricks, exports Snowflake et BigQuery, AWS Athena, pipelines dbt, et de plus en plus l’analyse Python ordinaire où il a discrètement remplacé le CSV comme manière par défaut d’enregistrer un dataframe.
Il devient aussi le format dans lequel des organismes publics et des projets de recherche publient de grands jeux de données, précisément parce que l’alternative — un CSV de deux gigaoctets que personne ne peut de toute façon ouvrir dans un tableur — ne sert personne. Si on vous en a remis un, c’est presque certainement la raison.
| Extension | .parquet |
|---|---|
| Type de média | application/vnd.apache.parquet |
| Publié par | Apache Software Foundation |
| Première publication | 2013 |