DuckDB c’est quoi ?
DuckDB est un système de base de données relationnel et open source (sous licence MIT). Les bases DuckDB sont portables (à l’instar de SQLite ou GeoPackage par exemple) ce qui rend leur utilisation assez simple : pas besoin d’installation « lourde », il faut seulement installer une bibliothèque dans votre langage préféré (Python, Rust, R, C++). Une CLI est également disponible.
Enfin, pour terminer cette brève introduction de la solution, il faut noter que DuckDB a la particularité d’utiliser un système de traitement par colonne (et non par ligne comme dans les SGBD classiques) ce qui diminue les temps de calcul sur certaines opérations. Un autre des atouts de cette solution est d’être capable de lire et convertir des données au format Parquet ou GeoParquet.
Les fonctions spatiales
DuckDB possède une extension pour utiliser des données spatiales qui n’est pas activée par défaut. L’inconvénient de cette extension spatiale est que pour le moment, elle ne gère pas les systèmes de projection. Pour la plupart, ces fonctions spatiales sont issues de la librairie GEOS. On y trouve toutes les fonctions spatiales classiques et le support de beaucoup de formats de données spatiales comme le Shapefile, GeoJSON ou KML par exemple.
Grâce à un financement de l‘IFREMER, nous avons développé un plugin QGIS qui permet d’afficher des données spatiales contenues dans une base DuckDB.
Fonctionnalités de QDuckDB
À l’heure ou DuckDB fait beaucoup parler de lui sur les différents réseaux, il est important qu’un logiciel SIG open source aussi important que QGIS soit en capacité de lire des données géographiques provenant de cette source.
Arrivés au terme de la première phase de développement de QDuckDB, nous sommes fiers d’annoncer la disponibilité de QDuckDB qui permet de charger dans QGIS une couche de données géographiques issue d’une base DuckDB.
Les principaux développements réalisés dans QDuckDB sont donc :
- Ajout d’un provider (ou fournisseur) de données permettant de lire une base de données DuckDB
- Création d’une interface utilisateur pour utiliser le provider
- Création d’un package pour Windows qui permet d’inclure les dépendances de DuckDB dans le plugin
Démonstration Vidéo
Sous le capot
Un fournisseur de données spécifiques intégré dans QGIS
Pour ajouter le support d’une nouvelle source de données dans QGIS il faut créer un nouveau provider (fournisseur).
Par défaut, le cœur de QGIS comporte un certain nombre de providers, comme PostgreSQL ou GeoPackage par exemple, tandis que d’autres peuvent être implémentés dans des plugins. Un provider dans le contexte QGIS est l’implémentation des interfaces définissant un fournisseur de données, interfaces qui permettront à QGIS d’obtenir les informations nécessaires pour constituer un layer (colonnes, geometry, structure, métadonnées, projection, clé primaire etc). La création du provider est donc de loin la partie la plus importante et volumineuse du projet.
Nous avons décidé d’implémenter ce nouveau provider via un plugin QGIS (et non dans le cœur). Tout d’abord parce que la technologie DuckDB est nouvelle et évolue encore rapidement et aussi parce que dans un premier temps, il est plus facile de maintenir un plugin qu’un développement cœur. Il s’agit donc d’un bon moyen de tester la connexion entre QGIS et DuckDB, avant d’envisager un portage vers le cœur.
À venir
Le provider ne permet pas encore d’éditer les données, il fonctionne en « read only » et seulement sur des tables contenant un seul type de géométrie (Point, Ligne ou Polygon). En fonction des financements disponibles, nous imaginons entre autres les améliorations suivantes :
- Modification d’une couche (modifier les données, ajouter/supprimer des colonnes, créer/supprimer des entités, etc)
- Import d’une couche spatiale depuis QGIS directement dans une base DuckDB
- Meilleure intégration de DuckDB dans QGIS
- Prise en compte des tables avec plusieurs types de géométrie
Pour toute demande d’évolution, n’hésitez pas à nous contacter : contact@oslandia.com
Liens importants
- Le code source (sous licence GPL2+)
- La documentation
- Le plugin sur le répertoire officiel QGIS