Historique de Parquet et de GeoParquet
1. Apache Parquet – Le format d’origine
Historique :
- 2013 : Création par Twitter et Cloudera.
- 2014 : Donné à la Apache Software Foundation.
- Conçu comme un format colonnaire optimisé pour la lecture rapide et la compression efficace.
Objectif :
- Stockage efficace de données tabulaires massives, notamment dans les écosystèmes Big Data (Hadoop, Spark…).
- Supporte types complexes, schémas, partitions, compression, etc.
2. GeoParquet – Extension géospatiale de Parquet
Historique :
Année | Événement |
2021 (avril) | Premiers échanges sur GitHub et dans les communautés open source pour étendre Parquet aux données géospatiales. |
2021 (août) | Début du projet GeoParquet sur GitHub (github.com/opengeospatial/geoparquet). |
2022 (mars) | Publication d’un brouillon du spécification v0.1.0, supportant une seule colonne géométrique par fichier. |
2023 (janvier) | Sortie de la version v1.0.0 RC (Release Candidate). |
2023 (novembre) | Adoption par l’OGC (Open Geospatial Consortium) comme Community Standard. |
2024 : | Adoption par des outils majeurs : GDAL, DuckDB, GeoPandas, QGIS, PostGIS (en lecture), etc. |
Objectif :
- Offrir un format geospatial performant pour les flux de données modernes, basé sur le succès de Parquet.
- Compatible avec l’écosystème Cloud / Data Lake.
Caractéristiques de GeoParquet
Caractéristique | Détail |
Base | Apache Parquet |
Géométries | Stockées dans une ou plusieurs colonnes, encodées en WKB |
CRS | Encodé dans les métadonnées JSON |
Métadonnées | JSON enrichi dans la section geo |
Compression | Inhérente à Parquet (Snappy, Zstd…) |
Outils support | GDAL ≥ 3.6, PyArrow, GeoPandas, DuckDB, QGIS ≥ 3.32 |
Spécifications techniques (GeoParquet)
- Fichier Parquet avec des colonnes géométriques,
- Métadonnées dans l’attribut geo au format JSON (voir exemple ci-dessous),
- Exemple :
{
"version": "1.0.0",
"primary_column": "geometry",
"columns": {
"geometry": {
"encoding": "WKB",
"geometry_type": "Point",
"crs": "EPSG:4326",
"edges": "planar",
"orientation": "counterclockwise",
"bbox": [-180, -90, 180, 90]
}
}
}
Pourquoi GeoParquet est important ?
GeoParquet est un format clé à l’intersection du géospatial et du Big Data. Il repose sur le format Parquet, largement utilisé dans les environnements analytiques modernes, tout en y ajoutant une sémantique géographique. Cette combinaison lui confère plusieurs avantages :
- Compatibilité Big Data + Géospatial : GeoParquet permet de manipuler efficacement des volumes massifs de données spatiales dans des environnements distribués ou cloud, tout en conservant la richesse des attributs géographiques.
- Adapté aux données massives : Il est particulièrement bien adapté au stockage et au traitement de grands jeux de données tels que les plans cadastraux, les données OpenStreetMap, ou les catalogues d’images satellitaires.
- Intégration aux outils modernes : Le format s’intègre nativement dans des outils récents et performants comme DuckDB, Dask, ou Arrow Flight, facilitant l’analyse rapide, le streaming ou la visualisation.
- Interopérabilité : GeoParquet est pris en charge par des bibliothèques Python courantes (GeoPandas, PyArrow, etc.), ainsi que par des logiciels SIG comme QGIS ou GeoServer, grâce au support assuré par GDAL.
En résumé, GeoParquet offre une solution moderne, portable et performante pour manipuler des données géographiques dans des écosystèmes à la fois SIG et Big Data.
Description technique du format GeoParquet
1. Base technique : Apache Parquet
GeoParquet est une extension du format Parquet, un format colonnaire binaire optimisé pour :
- la lecture rapide de grandes quantités de données,
- la compression efficace,
- et le traitement parallèle (big data / cloud).
Parquet repose sur :
- un schéma (type, nom, hiérarchie des champs),
- un stockage par colonnes, non par lignes,
- une structure en row groups, pages et encodages.
Parquet est agnostique aux types métiers (ex : il n’a pas de type « géométrie »).
Cela veut dire que le format Parquet ne connaît pas — et ne comprend pas nativement — les types de données « spécialisés » d’un domaine particulier (type métier), comme :
- les géométries (ex : points, polygones),
- les dates complexes (calendriers lunaires, etc.),
- les unités de mesure spécifiques (ex : altitudes en pieds),
- les objets 3D ou spatiaux.
Parquet ne gère que des types généraux et simples :
Type Parquet | Signification |
INT32, INT64 | Entiers |
FLOAT, DOUBLE | Décimaux |
BYTE_ARRAY | Chaînes ou données binaires |
BOOLEAN | Vrai/Faux |
TIMESTAMP | Date/heure (mais générique) |
Donc Parquet ne sait pas ce qu’est un « POINT » ou un « POLYGON ». Il ne fait que stocker une série d’octets (par exemple : une géométrie encodée en WKB) comme une chaîne binaire (BYTE_ARRAY).
Exemple concret : fichier GeoParquet
Imaginons une colonne « geometry » contenant des polygones.
- Dans Parquet : cette colonne est vue comme une suite de blobs binaires (byte arrays).
- Dans GeoParquet : une métadonnée JSON dit : « cette colonne contient du WKB représentant des polygones EPSG:4326 ».
Parquet seul ne comprend pas ce que c’est. Seule une application qui lit la métadonnée geo peut interpréter correctement les données (ex : QGIS, GDAL, GeoPandas).
Résumé
Élément | Détail |
Parquet | Stocke des colonnes dans un format très générique |
Type métier (géométrie) | Absent du standard Parquet |
Solution | GeoParquet ajoute une métadonnée décrivant les géométries |
Conséquence | Sans cette extension, un outil ne saurait pas que c’est une carte |
2. Extension GeoParquet
a. Structure de fichier
GeoParquet est un fichier .parquet, mais contenant :
- des colonnes géométriques encodées en WKB (Well-Known Binary),
- des métadonnées JSON embarquées dans la clé geo du fichier Parquet.
Ces métadonnées décrivent :
Élément | Rôle |
version | Version de la spec GeoParquet (ex: « 1.0.0 ») |
primary_column | Nom de la colonne géométrique principale |
columns | Objet décrivant chaque colonne géométrique |
b. Exemple de métadonnées GeoParquet
{
"geo": {
"version": "1.0.0",
"primary_column": "geometry",
"columns": {
"geometry": {
"encoding": "WKB",
"geometry_type": "Polygon",
"crs": "EPSG:4326",
"edges": "planar",
"orientation": "counterclockwise",
"bbox": [102.0, 0.5, 103.0, 1.5]
}
}
}
}
c. Champs techniques importants
Champ | Description |
encoding | « WKB » ou « WKT » (WKB est recommandé) |
geometry_type | Type OGC : « Point », « Polygon », « MultiPolygon », etc. |
crs | Référence spatiale, ex. « EPSG:4326 » ou WKT complet |
bbox | Borne minimale [xmin, ymin, xmax, ymax] |
edges | « planar » (default) ou « spherical » |
orientation | « counterclockwise » ou « clockwise » pour les polygones |
3. Éléments internes (Parquet)
- Row groups : unités de traitement contenant un ensemble de lignes,
- Pages : segments internes compressés pour chaque colonne,
- Encodage : PLAIN, DICTIONARY, DELTA, etc.,
- Compression : Snappy (par défaut), GZIP, Zstd…
Chaque colonne, y compris géométrique, est stockée de manière séparée, ce qui rend l’accès sélectif très performant.
4. Spécification complète
Disponible ici :
https://github.com/opengeospatial/geoparquet
Spécification officielle GeoParquet 1.0.0 (PDF)
Exemple d’inspection technique (avec pyarrow)
import pyarrow.parquet as pq
# Charger un fichier GeoParquet
table = pq.read_table(« fichier.parquet »)
metadata = table.schema.metadata
# Accès aux métadonnées GeoParquet
print(metadata[b »geo »].decode(« utf-8 »))
Résumé
Aspect | Détail |
Format | .parquet |
Géométrie | Colonne(s) WKB |
Métadonnées spatiales | Stockées dans la clé geo au format JSON |
Avantages | Compression, parallélisme, cloud-native |
Outils | GDAL, PyArrow, GeoPandas, QGIS (via GDAL), DuckDB |
Travailler avec GeoParquet dans QGIS
Travailler avec GeoParquet dans QGIS est aujourd’hui possible, mais nécessite certaines précautions, car le support de ce format est encore en développement dans l’écosystème géospatial.
Voici un guide pratique étape par étape pour comprendre et utiliser le GeoParquet dans QGIS.
GeoParquet est une spécification pour stocker des données spatiales dans le format Apache Parquet, avec des métadonnées géométriques compatibles avec les SIG.
Il combine la vitesse et compacité de Parquet avec la structure géométrique de formats comme GeoJSON ou Shapefile.
1. Conditions pour l’utiliser dans QGIS
Versions nécessaires :
- QGIS ≥ 3.34 (ou 3.32 avec compilation GDAL récente)
- GDAL ≥ 3.6, avec le support de Parquet et Arrow activé
Vérifiez dans QGIS :
- Menu Préférences > Options > Informations système
- Cherchez dans GDAL/OGR > vecteur la ligne :
- Parquet – (rw+v): Apache Parquet
2. Ouvrir un fichier GeoParquet dans QGIS
Méthode 1 : Glisser-déposer
- Crée ton fichier .parquet depuis Python ou un autre SIG.
- Glisse le fichier dans QGIS.
- Si QGIS reconnaît le format, il s’ouvrira comme une couche vectorielle.
Méthode 2 : Ajouter une couche vectorielle
- Couches > Ajouter une couche > Ajouter une couche vectorielle
- Source de données : sélectionne le fichier .parquet
- Type de fichier : Tous les fichiers ou Fichiers Parquet
- Valide.
3. Créer un GeoParquet depuis QGIS
QGIS ne permet pas encore d’exporter directement vers GeoParquet depuis l’interface graphique. Mais vous pouvez :
➤ Utiliser la console Python interne :
layer = iface.activeLayer()
gdf = QgsVectorLayerExporter.exportLayer(layer, ‘/chemin/couche.parquet’, ‘parquet’, layer.crs(), False)
➤ Ou passer par OGR en ligne de commande :
ogr2ogr -f Parquet sortie.parquet couche.shp
Par défaut, cette commande produit du Parquet sans métadonnées GeoParquet. Pour obtenir un vrai GeoParquet, il est préférable d’utiliser GeoPandas avec pyarrow.
4. Avantages dans QGIS
- Poids réduit par rapport au GeoJSON ou Shapefile
- Chargement rapide avec des millions d’entités
- Interopérable avec Python, DuckDB, Spark, etc.
Bonnes pratiques
Action | Recommandé |
Travailler avec des points | Très bien supporté |
Polygones complexes | Attention aux projections |
Édition dans QGIS | Pas encore supporté (lecture seule) |
Partage inter-outils | Excellente compatibilité |