Qu’est-ce que DuckDB exactement ?#
DuckDB est une base de données relationnelle orientée colonnes, comme PostgreSQL ou SQLite, mais pensée pour les analyses locales rapides (analytics, data science, ETL). On peut le voir comme le “SQLite de l’analytique” : une base légère, embarquée, sans serveur, qui se manipule avec SQL et qui lit très vite les données tabulaires.
- Sans serveur : pas de service à lancer, tu importes juste la bibliothèque (
duckdben Python par ex.) et tu commences à exécuter des requêtes. - Stockage en colonnes : les données d’une table sont stockées colonne par colonne, ce qui accélère les agrégations, les filtres et les scans partiels (comme dans les data warehouses).
- Conçu pour l’analytique, pas pour les transactions (contrairement à PostgreSQL qui gère des milliers d’écritures simultanées).
Est-ce une “vraie” base de données ?#
Oui, on peut créer une base DuckDB persistante sur disque (fichier .duckdb) ou travailler totalement en mémoire.
Création d’un fichier
ma_base.duckdbsur disque, comme un.sqlite:import duckdb con = duckdb.connect("ma_base.duckdb")Travail in-memory : rien n’est écrit sur disque, la base disparaît quand le programme se termine :
con = duckdb.connect()
On peut donc créer des fichiers .duckdb, mais ce n’est pas obligatoire.
Que peut-on lire avec DuckDB ?#
DuckDB sait lire directement plein de formats, sans import préalable :
- CSV (
.csv) - Parquet (
.parquet) - JSON (
.json) - SQLite (
.sqlite: via des fonctions de lecture spécifiques) - Fichiers distants (S3, HTTP…)
- Tables Pandas, Arrow, Polars, etc.
Par exemple, on peut faire :
SELECT * FROM read_csv_auto('data.csv');
ou mĂŞme :
SELECT * FROM 'data.parquet';
Concernant SQLite, DuckDB ne lit pas les fichiers .sqlite nativement comme un simple Parquet, mais il peut se connecter Ă eux via un import ou une extension (sqlite_scanner).
En Python par exemple :
con.sql("INSTALL sqlite_scanner; LOAD sqlite_scanner;")
con.sql("ATTACH 'ma_base.sqlite' AS sqlite_db (TYPE SQLITE);")
con.sql("SELECT * FROM sqlite_db.ma_table LIMIT 10;")
Ça permet d’interroger directement une base SQLite avec du SQL DuckDB, sans export.
In-memory vs fichiers#
| Mode | Description | Fichier créé | Usage typique |
|---|---|---|---|
| In-memory | Base temporaire en RAM | ❌ | Tests, transformations rapides |
| Persistant | Base stockée sur disque | ✅ .duckdb | Stockage local performant |
| Lecture directe | Fichiers externes (CSV, Parquet, JSON, SQLite…) | Pas de fichier DuckDB créé | Exploration ou requêtes hybrides |
Ce que DuckDB n’est pas#
- DuckDB n’est pas fait pour héberger une application web, ni pour gérer des milliers d’écritures simultanées.
- Ce n’est pas un PostgreSQL miniature, ni un moteur de transactions.
- C’est plutôt un moteur analytique local, pensé pour la vitesse, la simplicité, et la compatibilité avec les formats modernes (Parquet, Arrow…).
En résumé#
- ✅ DuckDB est une base de données (SQL, ACID, sans serveur).
- ✅ On peut créer un fichier
.duckdbou travailler entièrement en mémoire. - ✅ On peut lire plein de formats directement, y compris
.sqlitevia une extension. - ⚙️ C’est conçu pour le traitement analytique local (dataframes, parquet, CSV), pas pour le web ou les transactions.