DuckDB - Le moteur SQL qui transforme vos données

par Korben -

Vous en avez assez de jongler avec différents outils pour analyser vos données ? De devoir installer et configurer des systèmes complexes juste pour faire quelques requêtes SQL ? Alors laissez-moi vous présenter DuckDB, un petit moteur SQL qui va radicalement simplifier votre travail d’analyse de données.

Pensez-y comme un courageux petit canard capable de nager dans des océans de données, de s’envoler vers le cloud et de picorer précisément les informations dont vous avez besoin. Développé par une équipe de chercheurs passionnés aux Pays-Bas, DuckDB brille par sa simplicité d’utilisation et ses performances remarquables.

Première bonne surprise : pas besoin d’installation complexe ni de serveur dédié. Un simple fichier exécutable de 20 Mo suffit pour commencer à explorer vos données. Et quelle exploration ! DuckDB peut lire directement vos fichiers CSV, JSON, Parquet et même interroger des bases de données existantes comme PostgreSQL ou SQLite.

Une démo en ligne est disponible ici.

Mais sa véritable force réside dans sa capacité à traiter efficacement de grands volumes de données. Grâce à son architecture orientée colonnes et sa gestion optimisée de la mémoire, DuckDB peut analyser des fichiers de plusieurs gigaoctets en quelques secondes. Un exemple ? Prenons un fichier CSV d'1 Go : DuckDB le traite en à peine une seconde sur un ordinateur portable standard.

Voici un exemple simple pour démarrer. Imaginons que vous ayez un fichier de données démographiques à analyser :

-- Lecture directe d'un fichier CSV distant
SELECT * 
FROM 'https://data.example.com/demographics.csv'
WHERE region = 'Europe'
LIMIT 5;

Cette simple commande télécharge et analyse automatiquement le fichier, sans configuration préalable. DuckDB détecte intelligemment les types de colonnes et optimise le chargement des données.

Pour les données plus volumineuses, le format Parquet est particulièrement efficace :

-- Création d'une vue sur un fichier Parquet
CREATE VIEW population AS
FROM 'populations.parquet';

-- Analyse avec agrégation
SELECT region, 
COUNT(*) as nb_communes,
SUM(population) as total_pop
FROM population
GROUP BY region
ORDER BY total_pop DESC;

L’extension spatiale de DuckDB permet même d’analyser des données géographiques :

-- Chargement de l'extension spatiale
LOAD spatial;

-- Analyse de données GeoJSON
SELECT ST_Area(geometry) as surface,
properties->>'name' as nom
FROM read_json_auto('zones.geojson');

Les développeurs apprécieront particulièrement l’intégration transparente avec Python et R. Dans Python par exemple :

import duckdb

# Connexion et requête
con = duckdb.connect()
df = con.execute("""
SELECT *
FROM read_csv_auto('data.csv')
WHERE value > 100
""").df()

La syntaxe SQL de DuckDB est moderne et enrichie de fonctionnalités pratiques. Le GROUP BY ALL permet par exemple de faire des regroupements automatiques selon toutes les colonnes non agrégées. Le QUALIFY, de son côté, facilite le filtrage sur les fonctions de fenêtrage.

Pour les analyses plus complexes, DuckDB excelle dans les jointures entre différentes sources de données. Vous pouvez par exemple joindre un fichier CSV local avec une table PostgreSQL distante, le tout optimisé automatiquement.

-- Jointure entre sources hétérogènes
SELECT c.region, p.population, m.temperature
FROM 'communes.csv' c
JOIN postgres_table p ON c.id = p.commune_id
JOIN meteo.parquet m ON c.region = m.region;

L’approche embarquée de DuckDB présente donc de nombreux avantages :

  • Pas de serveur à administrer
  • Performances optimales sur les requêtes analytiques
  • Faible empreinte mémoire
  • Portabilité totale
  • Support natif de formats modernes comme Parquet

Et DuckDB n’est pas limité au SQL. Son architecture extensible permet d’ajouter facilement de nouvelles fonctionnalités via des extensions. L’extension HTTP permet par exemple d’interroger directement des APIs REST.

La communauté autour de DuckDB est particulièrement active et bienveillante. Les développeurs principaux sont très réactifs sur GitHub et Discord pour aider les utilisateurs.


Et voici en bonus, 3 articles, écrits par Eric Mauvière, ancien de l’INSEE, qui illustrent bien toutes ces fonctionnalités:

Bien sûr, DuckDB n’est pas la solution universelle. Pour les applications transactionnelles ou multi-utilisateurs, des bases de données traditionnelles comme PostgreSQL restent plus adaptées mais pour l’analyse de données, le traitement de fichiers volumineux ou le prototypage rapide, DuckDB se révèle être un outil remarquablement efficace.

La prochaine fois que vous devez analyser des données, pensez à ce petit canard capable de grandes choses. Sa simplicité d’utilisation combinée à ses performances impressionnantes en fait un compagnon idéal pour les data scientists, analystes et développeurs.

Alors, prêt à plonger dans le monde de DuckDB ? Commencez par visiter le site officiel pour télécharger l’outil et explorer la documentation complète. La communauté sera ravie de vous accueillir !

Un grand merci à Loicbcn pour le partage !

Site officiel de DuckDB