La version 1.2.0 de la base de donnĂ©es DuckDB, destinĂ©e Ă l'exĂ©cution de requĂȘtes analytiques et conceptuellement semblable Ă SQLite, a Ă©tĂ© publiĂ©e. DuckDB combine des propriĂ©tĂ©s de SQLite, telles que la compacitĂ©, l'intĂ©gration sous forme de bibliothĂšque embarquĂ©e, le stockage des bases de donnĂ©es dans un seul fichier et une interface CLI, avec des capacitĂ©s et des optimisations pour exĂ©cuter des requĂȘtes analytiques couvrant une part significative des donnĂ©es stockĂ©es, par exemple, rĂ©alisant l'agrĂ©gation de l'ensemble du contenu des tables ou fusionnant plusieurs grandes tables. Le code du projet est Ă©crit en C++ et est distribuĂ© sous la 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 de nouvelles mĂ©thodes de compression a Ă©tĂ© mise en Ćuvre, qui ne sont pas incluses par dĂ©faut pour conserver la compatibilitĂ© des fichiers de base de donnĂ©es avec les versions prĂ©cĂ©dentes de DuckDB. Pour utiliser le format amĂ©liorĂ© des fichiers de base de donnĂ©es, une possibilitĂ© de lier la base de donnĂ©es Ă un numĂ©ro de version a Ă©tĂ© proposĂ©e â lors de l'ouverture d'un fichier Ă l'aide du paramĂštre « STORAGE_VERSION », il est dĂ©sormais possible de spĂ©cifier la version minimale prise en charge de la base de donnĂ©es (« ATTACH âfile.dbâ (STORAGE_VERSION âv1.2.0â); »). Pour convertir le nouveau format en ancien, on peut utiliser la commande SQL COPY, par exemple : ATTACH âfile1.dbâ; ATTACH âconverted_file.dbâ (STORAGE_VERSION âv1.0.0â); COPY FROM DATABASE file1 TO converted_file;
- La prise en charge de la commande SQL « ALTER TABLE ⊠ADD PRIMARY KEY » a été ajoutée pour ajouter une clé primaire à une table existante.
- La restriction qui empĂȘchait de rĂ©ajouter des identifiants pour lesquels il y a un index de suivi d'unicitĂ©, si ces identifiants ont Ă©tĂ© supprimĂ©s dans la transaction actuelle, a Ă©tĂ© supprimĂ©e. Par exemple, le code SQL ci-dessous ne produit plus d'erreur : CREATE TABLE students (id INTEGER PRIMARY KEY, name VARCHAR); INSERT INTO students VALUES (1, âJohn Doeâ); BEGIN; DELETE FROM students WHERE id = 1; INSERT INTO students VALUES (1, âJane Doeâ);
- La prise en charge du chargement de fichiers CSV dans les encodages Latin-1 et UTF-16 a Ă©tĂ© ajoutĂ©e (auparavant, seul l'encodage UTF-8 Ă©tait pris en charge). FROM read_csv(âcities-latin-1.csvâ, encoding = âlatin-1â);
- La prise en charge de l'utilisation de sĂ©parateurs multibytes dans les fichiers CSV (jusqu'Ă 4 octets) a Ă©tĂ© ajoutĂ©e, permettant de spĂ©cifier des emojis comme sĂ©parateurs de colonnes. ađŠb hellođŠworld FROM read_csv(âexample.dsvâ, sep = âđŠâ);
- Par défaut, le mode strict de l'analyse des fichiers CSV («strict_mode = true») est activé, vérifiant la conformité au format de la spécification RFC 4180. En mode strict, un seul caractÚre est autorisé pour la séparation des lignes, ce qui entraßnera une erreur lors de l'analyse de fichiers utilisant non seulement le caractÚre de nouvelle ligne, mais aussi le retour chariot («\r\n»).
- Un nouvel algorithme de détection de nouvelle ligne a été implémenté dans le parseur CSV, prenant en charge le parallélisme des opérations. L'utilisation de ce nouvel algorithme a accéléré l'analyse des CSV d'environ 15%.
- La limitation de taille de ligne dans les fichiers CSV a été supprimée (auparavant, une ligne ne devait pas dépasser 8 Mo).
- Lors de l'exportation de donnĂ©es au format Parquet, le support des hachages (dictionnaires) et des index basĂ©s sur le filtre de Bloom a Ă©tĂ© rĂ©alisĂ©. Une mĂ©thode de compression DELTA_BINARY_PACKED a Ă©tĂ© mise en Ćuvre, permettant de rĂ©duire considĂ©rablement la taille des fichiers Parquet.
- Un mode sécurisé a été ajouté à l'interface de ligne de commande, activé par l'option «-safe» ou la commande «.safe_mode». En mode sécurisé, seul l'accÚs au fichier de base de données initialement spécifié est autorisé, et toute tentative d'ouverture d'autres fichiers entraßnera une erreur.
- L'interface en ligne de commande a amélioré l'autocomplétion des entrées. Le code d'autocomplétion a été mis à jour pour utiliser la PEG (Grammaire d'Expression de Parsing).
- En exécutant des commandes dans l'interface en ligne de commande, un affichage visuel des grands nombres a été implémenté, par exemple, pour afficher le nombre 100000000, il sera également indiqué «(100 millions)».
- En SQL, le support de la syntaxe a été ajouté, permettant d'indiquer des noms abrégés de tables et d'expressions avant les valeurs auxquelles elles se réfÚrent (au lieu d'utiliser la syntaxe «expression AS nom»): SELECT e1: une_expression_longue_et_complexe, e2: t2.nom_de_colonne FROM t1: long_schema.nom_de_table_longue, t2: short_s.tbl;
- Dans la commande «SELECT», le support de l'opération «RENAME» a été ajouté pour renommer les champs affichés lors de l'utilisation de l'expression «*»: SELECT * RENAME (col1 AS new_col1) FROM integers;
- Dans la commande «SELECT», l'utilisation des opĂ©rations «LIKE» et «SIMILAR TO» a Ă©tĂ© autorisĂ©e lors de l'affichage par «*»: SELECT * LIKE âval%â FROM key_val;
- La qualité de la génération des nombres aléatoires a été améliorée.
- L'optimiseur de requĂȘtes a Ă©tĂ© modernisĂ©. Les performances lors du test TPC-H SF100 ont augmentĂ© de 13%.
- Une nouvelle API similaire Ă C a Ă©tĂ© proposĂ©e pour le dĂ©veloppement d'extensions, qui peut ĂȘtre utilisĂ©e par exemple pour crĂ©er de nouvelles fonctions agrĂ©gĂ©es ou de tableau.
- Ajout de la prise en charge des systĂšmes avec la bibliothĂšque standard C Musl.
Source : opennet.ru
