La version 1.4.0 de la base de donnĂ©es DuckDB, conçue pour exĂ©cuter des requĂȘtes analytiques et conceptuellement similaire Ă SQLite, a Ă©tĂ© publiĂ©e. DuckDB combine des propriĂ©tĂ©s de SQLite telles que compacitĂ©, intĂ©gration en tant que bibliothĂšque embarquĂ©e, stockage de la base de donnĂ©es dans un seul fichier, et interface en ligne de commande, avec des fonctionnalitĂ©s et des optimisations pour exĂ©cuter des requĂȘtes analytiques couvrant une partie significative des donnĂ©es stockĂ©es, comme effectuer des agrĂ©gations sur l'ensemble du contenu des tables ou fusionner plusieurs grandes tables. Le code du projet est Ă©crit en C++ et est distribuĂ© sous licence MIT.
DuckDB fournit un dialecte SQL Ă©tendu, incluant des fonctionnalitĂ©s supplĂ©mentaires pour traiter des requĂȘtes trĂšs complexes et de longue durĂ©e. Il est possible d'utiliser des types complexes (tableaux, structures, unions), ainsi que d'exĂ©cuter des sous-requĂȘtes corrĂ©lĂ©es arbitraires et imbriquĂ©es. L'exĂ©cution simultanĂ©e de plusieurs requĂȘtes est supportĂ©e, ainsi que l'exĂ©cution de requĂȘtes directement Ă partir de fichiers au format CSV et Parquet. Un support pour l'importation Ă partir de bases de donnĂ©es PostgreSQL est Ă©galement disponible.
Le projet utilise un shell basĂ© sur SQLite, un analyseur provenant de PostgreSQL, un composant Date Math de MonetDB, sa propre implĂ©mentation de fonctions de fenĂȘtres (basĂ©e sur l'algorithme Segment Tree Aggregation), un gestionnaire d'expressions rĂ©guliĂšres sur la base de la bibliothĂšque RE2, son propre optimiseur de requĂȘtes, un mĂ©canisme de contrĂŽle de la concurrence multi-version (Multi-Version Concurrency Control), ainsi qu'un moteur d'exĂ©cution de requĂȘtes vectorisĂ© basĂ© sur l'algorithme Hyper-Pipelining Query Execution, permettant de traiter de grands ensembles de valeurs en une seule opĂ©ration.
Dans la nouvelle version :
- La prise en charge du stockage de fichiers de base de données de maniÚre chiffrée a été ajoutée. L'algorithme AES-256 en mode GCM est utilisé pour le chiffrement. Non seulement le fichier principal avec les données est chiffré, mais aussi les journaux WAL et les fichiers temporaires. Les clés pour le chiffrement de la base de données sont spécifiées par la commande ATTACH via le paramÚtre ENCRYPTION_KEY. ATTACH 'encrypted.db' AS enc_db (ENCRYPTION_KEY 'quack_quack');
- La prise en charge de la commande « MERGE INTO » a Ă©tĂ© ajoutĂ©e, qui peut ĂȘtre utilisĂ©e comme alternative Ă l'expression « INSERT ⊠ON CONFLICT », ne nĂ©cessitant pas de clĂ© primaire et fonctionnant avec des conditions de fusion arbitraires. La commande « MERGE INTO » permet de crĂ©er des expressions SQL conditionnelles combinant dans une seule expression les opĂ©rations INSERT, UPDATE et DELETE. Par exemple, avec MERGE, on peut organiser la fusion de deux tables en insĂ©rant les enregistrements manquants et en mettant Ă jour les existants. WITH deletes(item_id, delete_threshold) AS (VALUES (10, 3000)) MERGE INTO Stock USING deletes USING (item_id) WHEN MATCHED AND balance < delete_threshold THEN DELETE RETURNING merge_action, *;
- De plus, la prise en charge des opérations d'écriture pour travailler avec des tables au format Apache Iceberg a été ajoutée (auparavant, seule la lecture était supportée), ce qui permet de transférer des données d'Iceberg vers DuckDB et vice versa.
- Un indicateur de progression a été ajouté au client de ligne de commande pour suivre le temps restant avant l'achÚvement de l'opération.
- Une fonction de fenĂȘtre «FILL» a Ă©tĂ© ajoutĂ©e, pouvant ĂȘtre utilisĂ©e pour interpoler les valeurs manquantes dans des fenĂȘtres ordonnĂ©es. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- Un connecteur Teradata a Ă©tĂ© implĂ©mentĂ© pour se connecter aux bases de donnĂ©es Teradata. Ce connecteur permet de manipuler des tables, d'exĂ©cuter des requĂȘtes et de lancer des commandes SQL directement dans Teradata Ă l'aide de DuckDB.
- La prise en charge du checkpoint pour les tables stockĂ©es en mĂ©moire a Ă©tĂ© ajoutĂ©e, permettant ainsi de mettre en Ćuvre la compression. De plus, lors du checkpoint, les lignes supprimĂ©es sont nettoyĂ©es et de l'espace est libĂ©rĂ© aprĂšs des opĂ©rations de suppression. ATTACH ':memory:' AS memory_compressed (COMPRESS);
- Plusieurs optimisations de performance ont Ă©tĂ© proposĂ©es : La mise en Ćuvre du tri a Ă©tĂ© convertie pour utiliser l'algorithme de tri par fusion k-way, rĂ©duisant le mouvement des donnĂ©es. Les expressions de table communes (Common Table Expression, CTE) sont dĂ©sormais matĂ©rialisĂ©es par dĂ©faut.
Source : opennet.ru
