DuckDB : interroger le fichier SIREN complet en 7 secondes chrono

Il y a des outils qui changent la façon dont on travaille. DuckDB est de ceux-là.

Le problème avec l’API SIREN officielle

L’API SIRENE de l’INSEE est un service précieux, mais elle vient avec ses limites bien connues :

  • Quota strict : 30 requêtes par minute en accès gratuit, avec une gestion de tokens OAuth qui alourdit tout pipeline
  • Filtres limités : les recherches textuelles approximatives (ILIKE, phonétique) ne sont tout simplement pas disponibles
  • Pagination obligatoire : récupérer un volume de données conséquent demande des dizaines d’appels successifs, une gestion d’état, une gestion des erreurs réseau…
  • Latence réseau : chaque appel passe par HTTP, s’accumule, ralentit
  • Dépendance à la disponibilité du service tiers

Bref, pour un usage exploratoire ou analytique, l’API SIREN n’est pas l’outil adapté.

DuckDB

DuckDB est un moteur de base de données analytique embarqué (pensez SQLite). Mais conçu pour faire du vrai SQL analytique sur de gros volumes de données, directement en mémoire ou sur fichier.

Son super pouvoir ? Il peut interroger des fichiers Parquet distants comme si c’était une table SQL locale.

Et le gouvernement français publie justement une copie fraîche de la base SIREN complète au format Parquet sur data.gouv.fr.

La requête qui change tout

-- Charger le support HTTPS
INSTALL httpfs;
LOAD httpfs;

-- La requête
COPY (
    SELECT *
    FROM 'https://object.files.data.gouv.fr/data-pipeline-open/siren/stock/StockUniteLegale_utf8.parquet'
    WHERE denominationUniteLegale ILIKE '%votre recherche%'
) TO 'resultat.csv' (HEADER, DELIMITER ';');

Résultat : 00:00:07.46s

Sept secondes. Pour filtrer et exporter depuis un fichier Parquet qui contient plus de 11 millions d’unités légales, hébergé sur un serveur distant, sans avoir importé quoi que ce soit localement au préalable.

Ce qui se passe sous le capot

DuckDB ne télécharge pas tout le fichier. Grâce au format Parquet et à ses métadonnées de colonnes, il sait exactement quelles portions du fichier lire pour satisfaire la requête. C’est ce qu’on appelle le predicate pushdown et le column pruning : il ne lit que ce dont il a besoin, en streaming depuis l’URL distante.

Concrètement :

  • Zéro installation de base de données
  • Zéro import préalable
  • Zéro gestion de token OAuth
  • Zéro quota à surveiller
  • Un seul fichier binaire DuckDB (ou une simple ligne Python/Node)

Comparatif concret

Critère API SIREN officielle DuckDB + Parquet data.gouv.fr
Recherche texte approx. (ILIKE) ❌ Non disponible ✅ Natif SQL
Quota / rate limiting ⚠️ 30 req/min ✅ Aucun
Volume de données ⚠️ Pagination ✅ Tout d’un coup
Disponibilité offline ❌ Non ✅ Possible (cache local)
Courbe d’apprentissage API REST + OAuth SQL standard

Pour aller plus loin

DuckDB s’utilise aussi bien en CLI interactif, en script Python, en notebook Jupyter ou embarqué dans une application.

Quelques requêtes supplémentaires pour explorer la base SIREN :

-- Compter les entreprises actives par tranche d'effectif
SELECT trancheEffectifsUniteLegale, COUNT(*) as nb
FROM 'https://object.files.data.gouv.fr/data-pipeline-open/siren/stock/StockUniteLegale_utf8.parquet'
WHERE etatAdministratifUniteLegale = 'A'
GROUP BY 1
ORDER BY 2 DESC;

-- Chercher par SIREN exact
SELECT *
FROM 'https://object.files.data.gouv.fr/data-pipeline-open/siren/stock/StockUniteLegale_utf8.parquet'
WHERE siren = '123456789';

Démo

Siren

Conclusion

Pour tout travail d’exploration, d’audit ou d’enrichissement de données sur la base SIREN, le combo DuckDB + Open Data (data.gouv.fr) est une solution imbattable. En s’affranchissant des quotas et des latences des API tierces, on profite d’un SQL standard ultra-performant directement sur les fichiers sources.
Cette approche ne se limite pas aux données administratives, elle est tout aussi pertinente pour traiter les données OpenStreetMap (OSM) ou de l’IGN. Elle permet d’analyser des volumes massifs sans avoir à déployer une infrastructure PostgreSQL complète de plusieurs téraoctets. C’est l’outil idéal pour passer de la donnée brute à un indicateur en un temps record.