Aller au contenu
Stockage analytique

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

Modèle
-- 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

Exemple concret
-- 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

  1. 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.
  2. Sur Parquet, DuckDB lit seulement les colonnes et les groupes de lignes utiles : un fichier plus gros que la mémoire reste interrogeable.
  3. 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.
  4. 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