Bol vydaný databázový systém DuckDB 1.2.0, zameraný na vykonávanie analytických dopytov a konceptuálne podobný SQLite. DuckDB kombinuje vlastnosti SQLite, ako sú kompaktnosť, zabudovanie vo forme knižnice, uloženie databázy v jednom súbore a CLI rozhranie, s možnosťami a optimalizáciami na vykonávanie analytických dopytov, ktoré pokrývajú značnú časť uložených údajov, ako napríklad vykonávanie agregácie celého obsahu tabuliek alebo zlúčenie viacerých veľkých tabuliek. Kód projektu je napísaný v C++ a je distribuovaný pod licenciou MIT.
DuckDB poskytuje rozšírený dialekt jazyka SQL, ktorý obsahuje ďalšie možnosti pre spracovanie veľmi zložitých a dlhodobo vykonávaných dopytov. Je možné používanie zložitých typov (polia, štruktúry, zlučeniny), ako aj vykonávanie ľubovoľných a vnorených korelovaných poddopytov. Podporuje súčasné vykonávanie viacerých dopytov a vykonávanie dopytov priamo zo súborov vo formáte CSV a Parquet. K dispozícii je podpora importu z SDB PostgreSQL.
Projekt využíva obal zo SQLite, parser z PostgreSQL, komponent Date Math z MonetDB, vlastnú implementáciu oknových funkcií (na základe algoritmu Segment Tree Aggregation), spracovateľ regulárnych výrazov na základe knižnice RE2, vlastný optimalizátor dopytov, MVCC mechanizmus riadenia súčasného vykonávania úloh (Multi-Version Concurrency Control) a tiež vektorizovaný engine vykonávania dopytov založený na algoritme Hyper-Pipelining Query Execution, ktorý umožňuje v jednej operácii spracovať veľké množiny hodnôt.
V novej verzii:
- Implementovaná podpora nových metód kompresie, ktoré nie sú predvolene zahrnuté na zachovanie kompatibility databázových súborov s predchádzajúcimi verziami DuckDB. Na použitie vylepšeného formátu databázových súborov je navrhnutá možnosť viazania databázy na číslo verzie — pri otvorení súboru pomocou parametra „STORAGE_VERSION“ je teraz možné zadať minimálne podporovanú verziu databázy („ATTACH ‘file.db’ (STORAGE_VERSION ‘v1.2.0’);“). Na prevod nového formátu na starý je možné použiť SQL príkaz COPY, napríklad: ATTACH ‘file1.db’; ATTACH ‘converted_file.db’ (STORAGE_VERSION ‘v1.0.0’); COPY FROM DATABASE file1 TO converted_file;
- Pridaná podpora SQL príkazu „ALTER TABLE … ADD PRIMARY KEY“ na pridanie primárneho kľúča do existujúcej tabuľky.
- Odstránené obmedzenie, ktoré neumožňovalo opätovné pridávanie identifikátorov, pre ktoré existoval index sledovania jedinečnosti, ak tieto identifikátory boli odstránené v aktuálnej transakcii. Napríklad níže uvedený SQL kód teraz nezpôsobuje chybu: 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’);
- Pridaná podpora načítania CSV súborov v kódovaniach Latin-1 a UTF-16 (predtým sa podporovalo iba kódovanie UTF-8). FROM read_csv(‘cities-latin-1.csv’, encoding = ‘latin-1’);
- Pridaná podpora používania viacbajtových oddeľovačov v CSV súboroch (až 4 bajty), čo umožňuje používať emoji ako oddeľovač stĺpcov. a🦆b hello🦆world FROM read_csv(‘example.dsv’, sep = ‘🦆’);
- Predvolene je aktivovaný prísny režim spracovania CSV súborov ("strict_mode = true"), ktorý kontroluje zhodu formátovania so špecifikáciou RFC 4180. V prísnom režime je povolené používať len jeden znak na oddeľovanie riadkov, čo spôsobí chybu pri pokuse o spracovanie súborov, v ktorých sa na oddeľovanie riadkov používajú nielen znak nového riadku, ale aj znak návratu kurzora ("\r\n").
- V parseri CSV bol zapracovaný nový algoritmus určovania nového riadka, ktorý podporuje paralelizáciu operácií. Použitie nového algoritmu urýchlilo spracovanie CSV približne o 15%.
- Bolo odstránené obmedzenie veľkosti riadka v CSV súboroch (predtým riadok nemal presiahnuť 8 MB).
- Pri exporte dát vo formáte Parquet bola implementovaná podpora hashov (súborov) a indexov na báze Bloomovho filtra. Bol implementovaný spôsob kompresie DELTA_BINARY_PACKED, ktorý výrazne zníži veľkosť Parquet súborov.
- Do rozhrania príkazového riadku bol pridaný bezpečný režim, ktorý sa aktivuje pomocou možnosti "-safe" alebo príkazu ".safe_mode". V tomto režime je povolený prístup iba k pôvodne uvedenému súboru databázy, a pokus o otvorenie iných súborov vyvolá chybu.
- V rozhraní príkazového riadku bolo vylepšené automatické doplňovanie vstupu. Kód pre automatické doplňovanie bol prevedený na využívanie PEG (Parsing Expression Grammar).
- Pri vykonávaní príkazov v rozhraní príkazového riadku sa zavedie prehľadné zobrazenie veľkých čísel, napríklad pri zobrazovaní čísla 100000000 sa dodatočne pridá "(100 miliónov)".
- V SQL bola pridaná podpora syntaxe, kde skrátené názvy tabuliek a výrazov je možné uvádzať pred hodnotami, na ktoré sa vzťahujú (namiesto použitia syntaxe "výraz AS názov"): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- V príkaze "SELECT" bola implementovaná podpora operácie "RENAME" pre premenovanie polí, ktoré sú zobrazené pri uvedení výrazu "*": SELECT * RENAME (col1 AS new_col1) FROM integers;
- V príkaze "SELECT" sa povolilo používanie operácií "LIKE" a "SIMILAR TO" pri výstupe cez "*": SELECT * LIKE ‘val%’ FROM key_val;
- Zvýšila sa kvalita generovania pseudonáhodných čísel.
- Optimalizátor dopytov bol modernizovaný. Výkon pri teste TPC-H SF100 sa zvýšil o 13%.
- Bol zavedené nové API podobné C pre vývoj doplnkov, ktoré sa môže použiť napríklad na vytváranie nových agregačných alebo tabuľkových funkcií.
- Pridaná podpora systémov so štandardnou C knižnicou Musl.
Zdroj: opennet.ru
