Adaptateur DuckDB
DuckDB est l'adaptateur par défaut de Noria. Il ne nécessite aucun serveur, aucune installation externe — il fonctionne directement depuis Python.
Pourquoi DuckDB ?
- Zero-config : pas de serveur à démarrer, pas de port à ouvrir
- Ultra-rapide : moteur colonnaire optimisé pour l'analytique
- Lecture de fichiers native : CSV, Parquet, JSON directement en SQL
- Compatible SQL standard : fenêtres, CTEs, PIVOT, UNPIVOT, QUALIFY…
- Idéal pour le développement local et les pipelines data légers à moyens
Installation
DuckDB est inclus dans les dépendances de base de Noria :
Configuration
Mode fichier (persistant)
Le fichier .db est créé automatiquement s'il n'existe pas. Les données persistent entre les exécutions.
Mode mémoire (éphémère)
Utile pour les tests et les pipelines qui ne nécessitent pas de persistance.
Macros spécifiques DuckDB
Ces macros ont une implémentation optimisée pour DuckDB :
| Macro | Résultat DuckDB |
|---|---|
{{ cast('col', 'VARCHAR') }} |
CAST(col AS VARCHAR) |
{{ date_trunc('month', 'col') }} |
DATE_TRUNC('month', col) |
{{ current_timestamp() }} |
CURRENT_TIMESTAMP |
{{ concat('a', 'b') }} |
CONCAT(a, b) |
{{ to_char('col', 'YYYY-MM') }} |
STRFTIME(col, 'YYYY-MM') |
STRFTIME vs TO_CHAR
DuckDB utilise STRFTIME(col, format) (ordre inversé de PostgreSQL). La macro {{ to_char() }} gère cette différence automatiquement.
Fonctionnalités SQL DuckDB utiles
DuckDB supporte nativement de nombreuses fonctions analytiques avancées :
-- Lecture directe de fichiers (utilisable dans les seeds ou les SQL)
SELECT * FROM read_csv_auto('data/input.csv')
SELECT * FROM read_parquet('data/export.parquet')
SELECT * FROM read_json_auto('data/data.json')
-- QUALIFY (filtre sur les fonctions fenêtre sans sous-requête)
SELECT *
FROM commandes
QUALIFY ROW_NUMBER() OVER (PARTITION BY client_id ORDER BY date DESC) = 1
-- PIVOT natif
SELECT *
FROM (SELECT mois, region, ca FROM stats)
PIVOT (SUM(ca) FOR region IN ('nord', 'sud', 'est', 'ouest'))
-- UNPIVOT
SELECT *
FROM large_table
UNPIVOT (valeur FOR indicateur IN (col_a, col_b, col_c))
-- Échantillonnage
SELECT * FROM ma_table USING SAMPLE 10%
SELECT * FROM ma_table USING SAMPLE 1000 ROWS
Seeds avec DuckDB
DuckDB est particulièrement puissant pour les seeds car il lit les fichiers nativement :
Limitations
- Pas de multi-utilisateurs concurrent : DuckDB fichier ne supporte qu'une connexion en écriture à la fois.
- Pas adapté à la production web : préférer PostgreSQL pour les applications multi-utilisateurs.
- Taille : performant jusqu'à plusieurs dizaines de GB — au-delà, envisager PostgreSQL ou BigQuery.