Étape 0 : Créer une connexion DuckDB

Pour commencer, il faut ouvrir une connexion vers DuckDB. C’est un peu comme ouvrir une session de travail : tant qu’elle est ouverte, on peut y stocker des tables temporaires et lancer des requêtes.

DuckDB s’utilise en R avec le package duckdb, qui suit l’interface standard DBI (la même interface que pour se connecter à PostgreSQL ou MySQL en R). Si vous avez déjà utilisé DBI::dbConnect() avec une autre base, la logique est identique.

Installer et charger le package

install.packages("duckdb") # le package DBI s'installe en même temps que duckdb

library(DBI)
library(duckdb)

Ouvrir une connexion

Deux cas de figure :

Connexion en mémoire (le plus courant pour une étude)

Les données ne sont pas conservées sur disque : tout disparaît à la fermeture de la session R. C’est suffisant pour la majorité des études ou réponses à la demande.

con <- DBI::dbConnect(duckdb::duckdb())

Connexion vers un fichier sur disque

Utile si vous voulez que la base DuckDB persiste d’une session R à l’autre (par exemple pour un projet que vous reprenez sur plusieurs jours).

con <- DBI::dbConnect(duckdb::duckdb(), dbdir = "mon_etude.duckdb")
Astuce

Un seul objet con suffit pour tout le script : c’est lui qu’on réutilise dans toutes les étapes suivantes (chargement, manipulation, export).

AvertissementL’utilisation des fichiers .duckdb

Les fichiers .duckdb ne doivent pas être pérennisés, ni utilisés dans des pipelines de production de données. Le format Parquet doit être privilégié.

Il est aussi possible de configurer le comportement de la base (mémoire maximale utilisée, nombre de threads, etc.) avec des instructions SET

DBI::dbExecute(con, "SET preserve_insertion_order = false;")

L’instruction de cet exemple doit être ajoutée après chaque création de base duckdb. Elle permet de réduire l’utilisation de la RAM lors de calculs, ce qui réduit le risque de saturation de la mémoire.

Voir la documentation de configuration pour la liste complète des options.

AvertissementModifier plusieurs paramètres lors de la configuration de la base

Attention, la fonction DBI::dbExecute() n’accepte qu’une seule instruction à la fois. Pour modifier plusieurs paramètres, il faut passer autant de requêtes que d’éléments à modifier.

Fermer la connexion

Une fois le script terminé, on ferme proprement la connexion. C’est une bonne pratique à prendre dès le départ, en particulier avec une base sur disque.

DBI::dbDisconnect(con, shutdown = TRUE)

Sources

Retour au sommet