DuckDB comme entrepôt analytique compact : adieu ETL et Postgres
DuckDB permet de créer un entrepôt analytique dans un simple fichier .duckdb, en évitant les pipelines ETL et Postgres pour les charges OLAP. Le moteur traite directement les fichiers Parquet, CSV et JSON locaux ou sur S3/GCS, offrant un accès rapide aux données pour tableaux de bord et rapports, sans infrastructure distribuée. Idéal pour les équipes aux ressources limitées qui privilégient la fraîcheur et la reproductibilité des données.
Les points douloureux de la pile ETL + Postgres traditionnelle
Postgres gère bien les charges OLTP, mais les requêtes OLAP génèrent des problèmes en cascade : les index ralentissent le vacuuming, les agrégats interfèrent avec les transactions, et les jobs ETL se heurtent aux changements de schéma. Les équipes passent plus de temps en tâches administratives qu'en analyse. DuckDB élimine ces points de défaillance en tant que moteur OLAP embarqué sans stockage persistant.
L'architecture se simplifie ainsi :
- Sources (bases, S3, CSV) → Instantanés Parquet → DuckDB (couches bronze/argent/or) → Exports BI.
Le pipeline se résume à un script planifié avec vues et exports, minimisant les frais d'exploitation.
SLAs pour un micro-entrepôt DuckDB
Vous pouvez garantir des SLAs clairs sans complexité de cluster :
- Fraîcheur des données : Mises à jour toutes les 15–60 minutes avec journalisation des horodatages.
- Précision : Métriques dans des vues SQL sous contrôle de version avec revue de code.
- Performance : p95 < 2 s pour tableaux de bord sur 90 jours de données.
- Récupération : Rebuild complet depuis Parquet en <30 minutes.
- Exploitation/Coût : Un fichier + un job, sans coûts de stockage continu.
Le fichier .duckdb est facile à sauvegarder et à déplacer.
Cas d'usage en analyse produit
Pour un SaaS B2B avec événements en base relationnelle et logs sur S3 :
- Instantanés quotidiens des tables vers Parquet partitionné.
- Événements sous forme de fichiers Parquet partitionnés par date.
- Vues de métriques en couche or (WAU, cohortes de rétention).
- Export de Parquet curaté pour outils BI.
L'extension httpfs permet la lecture directe sur S3 sans copies locales. DuckDB agrège plusieurs fichiers Parquet comme une seule table.
Scripts d'implémentation pratiques
Script de mise à jour (Python)
import duckdb
from datetime import datetime
DB = "micro_warehouse.duckdb"
con = duckdb.connect(DB)
con.execute("INSTALL httpfs;")
con.execute("LOAD httpfs;")
con.execute("""
CREATE OR REPLACE VIEW bronze_events AS
SELECT *
FROM read_parquet('data/events/date=*/events-*.parquet');
""")
con.execute("""
CREATE OR REPLACE VIEW silver_events AS
SELECT
CAST(event_time AS TIMESTAMP) AS event_time,
user_id,
team_id,
event_name,
NULLIF(properties, '') AS properties
FROM bronze_events
WHERE user_id IS NOT NULL;
""")
con.execute("""
CREATE OR REPLACE VIEW gold_weekly_active_teams AS
SELECT
date_trunc('week', event_time) AS week,
COUNT(DISTINCT team_id) AS weekly_active_teams
FROM silver_events
GROUP BY 1
ORDER BY 1;
""")
con.execute("""
COPY (SELECT * FROM gold_weekly_active_teams)
TO 'exports/gold_weekly_active_teams.parquet' (FORMAT PARQUET);
""")
con.execute("CREATE OR REPLACE TABLE ops_refresh_log AS SELECT 1 AS dummy;")
con.execute("""
INSERT INTO ops_refresh_log
SELECT 1
""")
print("Update OK:", datetime.utcnow().isoformat(), "DB:", DB)
Ce script construit les couches bronze/argent/or et exporte les métriques.
Mises à jour incrémentales
Pour les upserts, utilisez MERGE sur les clés (semaine, team_id) dans une table matérialisée, en recalculant les fenêtres glissantes.
Migration sans interruption
Gardez l'OLTP sur Postgres et migrez l'OLAP vers DuckDB via l'extension postgres_scanner pour un accès lecture/écriture sur une instance live. Transférez progressivement les requêtes sans refactoring.
Limites de DuckDB comme entrepôt
Parfait pour :
- Quelques analystes (tableaux de bord, exports).
- Données append-only ou instantanés.
- Flux Parquet portables.
Pas adapté pour :
- Forte concurrence avec utilisateurs interactifs.
- Écritures OLTP avec garanties ACID.
- Sécurité au niveau des lignes multi-locataires.
- Contrats de données d'entreprise avec de nombreux producteurs.
Points clés
- DuckDB est un moteur OLAP embarqué en un seul fichier, lisant directement Parquet/S3.
- Simplifie la pile : script + vues au lieu d'ETL + Postgres.
- SLAs atteignables : fraîcheur 15 min, p95<2 s, récupération <30 min.
- Migration progressive via postgres_scanner.
- Limites : faible concurrence, pas pour OLTP.
— Editorial Team
Aucun commentaire pour le moment.