DuckDB est un système de gestion de base de données SQL OLAP (Online Analytical Processing) haute performance, embarqué directement dans l’application. Contrairement aux bases de données client-serveur traditionnelles, DuckDB s’exécute en mode in-process, à la manière de SQLite, mais en étant optimisé pour les charges analytiques plutôt que transactionnelles.
On peut le voir comme un « SQLite pour l’analytics » : aucune configuration nécessaire, aucune dépendance externe, et la capacité d’exécuter des requêtes analytiques complexes sur des jeux de données allant de quelques mégaoctets à plusieurs centaines de gigaoctets, directement depuis une machine locale.

DuckDB propose deux modes de fonctionnement principaux pour s’adapter à différents cas d’usage :
L’architecture de DuckDB est pensée pour la performance analytique :
Démarrer avec DuckDB est remarquablement simple : aucun serveur à installer, aucun fichier de configuration, aucune dépendance externe.
Téléchargez et installez l’exécutable autonome correspondant à votre plateforme.
pip install duckdb
C’est tout. Aucun serveur de base de données à configurer, aucun port à ouvrir, aucun utilisateur à créer.
À noter : des clients existent également pour d’autres langages (Go, Java, JavaScript, C/C++, R, Rust, etc.).
Le CLI DuckDB fournit un shell SQL interactif pour des analyses rapides :
Opérations courantes :
L’intégration Python est l’un des points forts de DuckDB :
DuckDB se connecte nativement à Azure Blob Storage et ADLS Gen2 via l’extension azure, ce qui permet d’interroger des données cloud comme si elles étaient locales.
Remarque : ces commandes sont optionnelles. L’extension Azure est automatiquement téléchargée et installée dès qu’un mot-clé d’extension est utilisé (par exemple TYPE AZURE).
Le système unifié de gestion des SECRETS de DuckDB offre plusieurs modes d’authentification :
1. Chaîne de connexion (idéal pour le développement local)
2. Service Principal (pour des workloads hors Azure)
3. Managed Identity (pour des workloads hébergés sur Azure)
CREATE SECRET azure_mi (
TYPE AZURE,
PROVIDER CREDENTIAL_CHAIN,
ACCOUNT_NAME 'myaccount'
);
DuckDB prend en charge plusieurs formats d’URI pour le stockage Azure.
Les deux formats supportent les glob patterns :
-- Query all parquet files in a directory SELECT * FROM 'abfss://datalake/raw/sales/*.parquet'; -- Query files across partitioned directories SELECT * FROM 'abfss://datalake/raw/sales/year=*/month=*/*.parquet';
L’une des fonctionnalités les plus puissantes de DuckDB est sa capacité à joindre des données provenant de sources différentes dans une seule requête : fichiers locaux, comptes de stockage cloud multiples ou DataFrames en mémoire.
-- Set up secrets for multiple storage accounts
CREATE SECRET adlsduckdb (
TYPE AZURE,
PROVIDER CREDENTIAL_CHAIN,
ACCOUNT_NAME 'adlsduckdb'
);
CREATE SECRET adlsmasterdata (
TYPE AZURE,
PROVIDER CREDENTIAL_CHAIN,
ACCOUNT_NAME 'adlsmasterdata'
);
select count(*) from
'abfss://data@adlsduckdb.dfs.core.windows.net/orders.parquet' orders join -- from main data lake
'abfss://masterdata@adlsmasterdata.dfs.core.windows.net/customer.parquet' customer -- from master data lake
on customer.c_custkey = orders.o_custkey;

L’intégration Python de DuckDB permet un échange de données zero-copy avec Pandas ou Polars.
import duckdb
import polars as pl
# Create a Polars DataFrame
df = pl.DataFrame({
'id': [1, 2, 3],
'value': [100, 200, 300]
})
# Query Polars DataFrame directly
result = duckdb.query("SELECT * FROM df WHERE value > 150").pl()
# Use Polars lazy frames for optimized execution
lazy_df = df.lazy()
result = duckdb.query("SELECT * FROM lazy_df").pl()
Malgré ses capacités impressionnantes, DuckDB présente certaines limites à connaître :
Au-delà d’une base de données, on peut utiliser DuckDB comme moteur de requêtes dans des workflows data de petite à moyenne taille, en remplacement ou en complément de Pandas et Polars.
Sa capacité à monter en charge permet également son intégration dans des environnements Big Data et dans des plateformes comme Fabric ou BigQuery.
Vous trouverez ici des ressources complémentaires sur DuckDB :