URL:     https://linuxfr.org/users/n_e/journaux/rechercher-des-fichiers-csv-sans-ia
Title:   Rechercher des fichiers CSV (sans IA)
Authors: n_e
Date:    2026-10-03T18:38:40+02:00
Tags:    
Score:   12


Voilà un court journal pour vous parler d'un outil que je trouve à la fois excellent et extrêmement utile, à savoir [DuckDB](https://duckdb.org).

DuckDB est une base de données opensource, analytique, embarquée, orientée colonne et interopérable.

Si je prends mot par mot :

- **opensource** : distribuée sous licence MIT

- **analytique** : optimisée pour les requêtes analytiques (typiquement faire des aggrégats - pour l'exemple le plus banal, calculer le chiffre d'affaire par mois à partir d'une table factures), aux dépens des requêtes transactionnelles (qui lisent et modifient un petit nombre d'enregistrements, mais très fréquemment)
- **embarquée** : même principe que sqlite, les bases de données sont des fichiers locaux. Il n'y a pas de serveur par défaut
- **orientée colonne** : les données sont stockées colonne par colonne au lieu d'enregistrement par enregistrement. Cela permet notamment de faire des requêtes rapides sans index, et donc de rechercher n'importe quelle colonne
- **interopérable** : elle permet de lire et écrire de nombreux formats de fichier (csv, parquet, json, excel, etc.) sur de nombreux supports (système de fichiers, stockage objet, http, etc.)

## Pourquoi DuckDB c'est bien ?

DuckDB permet de lire, écrire et requêter des fichiers de données très simplement, mais fonctionne aussi avec de (très) gros fichiers, et tout ça rapidement.

Pour commencer, on peut utiliser DuckDB en mode interactif, soit avec une base de données en mémoire, soit avec une base de données dans un fichier :

```sh
$ duckdb
DuckDB v1.5.5 (Variegata)
Enter ".help" for usage hints.
memory D
^D

$ duckdb data.duck
DuckDB v1.5.5 (Variegata)
Enter ".help" for usage hints.
data D
```

mais aussi en one-liner :

```sh
$ duckdb -c 'select 1;'
┌───────┐
│   1   │
│ int32 │
├───────┤
│     1 │
└───────┘
```

ou avec un fichier de commandes (je vous passe la commande).


Ensuite, on peut lire des fichiers avec des défauts très raisonnables :

```sql
select * from read_csv('fichier.csv');
select * from read_json('fichier.ndjson');
-- etc.
```

Les types des colonne sont inférés automatiquement (texte, nombre, date, etc.). Et si ça ne convient pas on peut évidemment ajouter des options pour améliorer ça.

Si on veut faire des requêtes plus rapidement ou tout simplement ne pas répéter les commandes on peut stocker les données dans une table :

```sql
create table gruik as read_csv('fichier.csv');
```

Et ensuite on peut faire n'importe quelle requête.

Et bien sûr on peut exporter les données. Par exemple si on veut transformer un type de fichier on peut faire ça :

```sql
copy (select * from read_csv('a.tsv')) to 'out.json';
```

# Et la recherche ?

DuckDB supporte non seulement les fonctionnalités habituelles du SQL standard, mais aussi la syntaxe pratique des bases de données analytiques (clause QUALIFY, mots-clés EXCLUDE ou autres dans la clause SELECT) et pas mal d'extensions qu'elle soient "core" ou communautaires (recherche en texte intégral, filtres bloom, interopérabilité avec d'autres choses...).
