Avaldati DuckDB andmebaasi uus versioon 1.4.0, mis on suunatud analüütiliste päringute täitmisele ja mille kontseptsioon meenutab SQLite't. DuckDB ühendab endas SQLite omadused, nagu kompaktne suurus, integreeritav teegivorming, andmebaasi salvestamine ühte faili ning CLI-liides, koos nende võimaluste ja optimeeringutega, et teostada analüütilisi päringuid, mis katab suure osa salvestatud andmetest, näiteks kogudes kokku kõigi tabelite sisu või ühendades mitu suurt tabelit. Projekti kood on kirjutatud C++ keeles ja see on litsentseeritud MIT litsentsi alusel.
DuckDB pakub laiendatud SQL keele dialekti, mis sisaldab täiendavaid võimalusi väga keeruliste ja pikaajaliste päringute seadmiseks. Toetatakse keeruliste tüüpide (massivid, struktuurid, ühendused) kasutamist, samuti võimalust teostada omavahelisi ja sisse-välja korreleeruvaid alam-päringuid. Samuti on lubatud mitme päringu samaaegne täitmine ning päringute käivitamine otse CSV ja Parquet formaadis failidest. Toetatakse ka andmete importimist PostgreSQL andmebaasidest.
Projekt kasutab SQLite'i paketti, PostgreSQL'i parserit, MonetDB Date Math komponenti, enda aknafunktsioonide rakendust (Segment Tree Aggregation algoritmil põhinev), RE2 raamatukogul põhinevat regulaarsete väljendite töötlejat, enda päringute optimeerijat, MVCC-mehhanismi (Multi-Version Concurrency Control) täitmise juhtide haldamiseks, samuti vektoreeritud päringute täitmise mootori Hyper-Pipelining Query Execution algoritmil, mis võimaldab ühes operatsioonis kiiresti töödelda suuri väärtuste komplekte.
Uues versioonis:
- Lisatud tugi andmefailide salvestamiseks krüptitud kujul. Krüptimiseks kasutatakse AES-256 algoritmi GCM režiimis. Krüptitakse mitte ainult põhifail andmete, vaid ka WAL-logide ja ajutiste failide. Krüptimisvõtmed määratakse käsku ATTACH kaudu parameetriga ENCRYPTION_KEY. ATTACH 'encrypted.db' AS enc_db (ENCRYPTION_KEY 'quack_quack');
- Lisatud on käsk «MERGE INTO», mida saab kasutada alternatiivina väljendile «INSERT … ON CONFLICT», mis ei vaja põhivõtit ja töötab suvaliste liitumistingimustega. Käsk «MERGE INTO» võimaldab luua tingimuslikke SQL-väljendeid, mis ühendavad ühes väljendis INSERT, UPDATE ja DELETE toimingud. Näiteks saab MERGE abil korraldada kahe tabeli ühendamist, lisades puuduvad kirjed ja värskendades olemasolevaid. 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, *;
- Lisaks on Apache Icebergi formaadis tabelitega tegelemiseks lisatud kirjutusoperatsioonide tugi (varasemalt toetati ainult lugemist), mis võimaldab andmete edastamist Icebergist DuckDB-sse ja tagasi.
- Käsurea kliendisse on lisatud tööprotsessi edenemise näidik, mis ennustab jääkaja kuni toimingu lõpuni.
- Lisatud on aknafunktsioon «FILL», mida saab kasutada korraldatud akendes puuduolevate väärtuste interpoleerimiseks. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- Rakendatud on Teradata Connectori lisand, mis võimaldab ühendada Teradata andmebaasidega. Lisand võimaldab hallata tabeleid, edastada päringuid ja käivitada SQL-käske otse Teradatasse, kasutades DuckDB-d.
- Lisatud on mälu talletatavate tablettide seisundi fikseerimise (checkpoint) toetus, mis võimaldas sisse viia ka tiheduse toetuse. Lisaks toimub fikseerimise käigus kustutatud ridade puhastamine ja ruumi vabastamine pärast kustutamisoperatsioone. ATTACH ‘:memory:’ AS memory_compressed (COMPRESS);
- Pakutud on mitmeid jõudluse optimeerimise abinõusid: Sortimise elluviimine on üleviidud mitmerealise sulandamise algoritmi (k-way merge sort) kasutamise peale, mis vähendab andmete liikumist. Üldised tabeli väljendid (Common Table Expression, CTE) materialiseeritakse nüüd vaikesätetena.
Allikas: opennet.ru
