Aller au contenu

DuckDB - SGBD OLAP

·3 mins·
Data Science Data SGBD OLAP
Sommaire

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 (duckdb en 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.duckdb sur 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
#

ModeDescriptionFichier crééUsage typique
In-memoryBase temporaire en RAM❌Tests, transformations rapides
PersistantBase stockée sur disque✅ .duckdbStockage local performant
Lecture directeFichiers 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 .duckdb ou travailler entièrement en mĂ©moire.
  • âś… On peut lire plein de formats directement, y compris .sqlite via une extension.
  • ⚙️ C’est conçu pour le traitement analytique local (dataframes, parquet, CSV), pas pour le web ou les transactions.

Sources
#

Thibault CLEMENT - Intechnia
Auteur
Thibault CLEMENT - Intechnia
Data scientist