Partitionnement et élagage
Partitionner range les fichiers d'une table dans des dossiers selon une colonne, souvent la date. Les requêtes qui filtrent sur cette colonne ne lisent alors que les dossiers utiles.
- partition
- hive
- élagage
- pruning
- petits fichiers
- compaction
- date
Syntaxe
Disposition « à la Hive » : une partition = un dossier clé=valeurlac/ventes/├── date_vente=2026-10-30/part-0.parquet├── date_vente=2026-10-31/part-0.parquet└── date_vente=2026-11-01/part-0.parquetRequête : WHERE date_vente = '2026-10-31'→ le moteur ne liste et ne lit que le dossier date_vente=2026-10-31 (élagage)Exemple
# Bibliothèque : pyarrowimport pyarrow as paimport pyarrow.dataset as dsimport pyarrow.parquet as pqventes = pa.table({ "date_vente": ["2026-10-30", "2026-10-31", "2026-10-31", "2026-11-01"], "magasin": ["Lyon", "Lyon", "Nantes", "Lyon"], "montant": [120.0, 98.0, 75.5, 64.0],})pq.write_to_dataset(ventes, "lac/ventes", partition_cols=["date_vente"])# lac/ventes/date_vente=2026-10-30/…parquet# lac/ventes/date_vente=2026-10-31/…parquet# lac/ventes/date_vente=2026-11-01/…parquetjeu = ds.dataset("lac/ventes", format="parquet", partitioning="hive")print(len(jeu.files))# 3lot = jeu.to_table(filter=ds.field("date_vente") == "2026-10-31")print(lot.num_rows, sorted(lot.column("magasin").to_pylist()))# 2 ['Lyon', 'Nantes'] (un seul dossier lu sur trois)À retenir
- Partitionnez sur la colonne la plus souvent filtrée et à cardinalité modérée : la date du jour ou du mois convient, l'identifiant client crée des millions de dossiers minuscules.
- L'élagage ne fonctionne que si le filtre porte directement sur la colonne de partition. Un filtre sur une expression calculée (année extraite d'un horodatage) peut forcer la lecture de tout.
- Le partitionnement facilite aussi l'idempotence : réécrire le lot du 31 octobre revient à remplacer un seul dossier.
- Piège : partitionner trop finement (par heure et par magasin) pour peu de données. On obtient une multitude de petits fichiers, la liste des fichiers devient plus longue à lire que les données ; compactez-les régulièrement.
Voir aussi
- ParquetParquet range les valeurs colonne par colonne, compressées et accompagnées de statistiques. C'est le format de référence pour stocker des données qu'on va surtout lire et agréger.
- Lakehouse : Iceberg et Delta LakeIceberg et Delta ajoutent aux fichiers Parquet d'un lac un journal de versions : transactions ACID, mises à jour et voyage dans le temps. On les adopte pour un entrepôt bâti sur un lac.
- Idempotence : rejouer sans doublonUne tâche idempotente produit le même résultat qu'on la lance une fois ou dix. C'est la condition pour relancer un pipeline après une panne sans créer de doublons ni perdre de lignes.