DuckDB : analyser des fichiers en SQL
DuckDB est une base analytique embarquée qui interroge directement des fichiers Parquet, CSV ou JSON en SQL. Idéale pour explorer, tester un pipeline ou traiter des volumes moyens en local.
- duckdb
- olap
- embarqué
- parquet
- csv
- local
- read_parquet
- copy
Syntaxe
-- Lire un ou plusieurs fichiers comme une tableSELECT … FROM 'dossier/*.parquet';SELECT … FROM read_parquet('dossier/**/*.parquet', hive_partitioning = true);SELECT … FROM read_csv('fichier.csv'); -- types et séparateur détectés-- Écrire un résultatCOPY (SELECT …) TO 'resultat.parquet' (FORMAT parquet);Exemple
-- Fichiers : export/ventes_2026-10.parquet (3 ventes) et magasins.csv-- magasins.csv :-- magasin,region-- Lyon,Auvergne-Rhône-Alpes-- Nantes,Pays de la LoireSELECT magasin, COUNT(*) AS nb_ventes, ROUND(SUM(montant), 2) AS caFROM 'export/ventes_*.parquet'GROUP BY magasinORDER BY ca DESC;-- Lyon | 2 | 218.0-- Nantes | 1 | 75.5-- Joindre un Parquet et un CSV, sans aucun chargement préalableSELECT m.region, ROUND(SUM(v.montant), 2) AS caFROM read_parquet('export/ventes_*.parquet') vJOIN read_csv('magasins.csv') m USING (magasin)GROUP BY ALLORDER BY ca DESC;-- Auvergne-Rhône-Alpes | 218.0-- Pays de la Loire | 75.5COPY (SELECT magasin, SUM(montant) AS ca FROM 'export/ventes_*.parquet' GROUP BY ALL)TO 'ca_par_magasin.parquet' (FORMAT parquet);À retenir
- DuckDB tourne dans le processus qui l'appelle (Python, ligne de commande, navigateur) : pas de serveur à installer, ce qui en fait un bon outil pour les tests de pipeline en intégration continue.
- Sur Parquet, DuckDB lit seulement les colonnes et les groupes de lignes utiles : un fichier plus gros que la mémoire reste interrogeable.
- GROUP BY ALL regroupe sur toutes les colonnes non agrégées du SELECT, et EXPLAIN ANALYZE montre ce qui a réellement été lu.
- Piège : s'en servir comme base partagée où plusieurs applications écrivent en même temps. Un fichier DuckDB n'accepte qu'un seul processus en écriture ; pour cela, il faut un vrai serveur ou un entrepôt.
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.
- Formats de fichiers : CSV, JSON, Avro, ParquetLe format d'un fichier décide de ce qui coûte cher : écrire, lire, typer ou faire évoluer. On choisit CSV ou JSON pour échanger, Avro pour des messages, Parquet pour analyser.
- Partitionnement et élagagePartitionner 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.