UtgÄvan av databashanteraren DuckDB 1.4.0 har publicerats, som Àr inriktad pÄ att utföra analytiska frÄgor och konceptuellt liknar SQLite. DuckDB kombinerar sÄdana egenskaper som SQLite, inklusive kompakt storlek, inbÀddad bibliotekskoppling, lagring av databaser i en fil och CLI-grÀnssnitt, med kapacitet och optimeringar för att hantera analytiska frÄgor som omfattar en betydande del av de lagrade datan, till exempel genom att utföra aggregering av allt innehÄll i tabeller eller kombinera flera stora tabeller. Projektets kod Àr skriven i C++ och distribueras under MIT-licens.
DuckDB erbjuder en utökat SQL-dialekt som inkluderar ytterligare funktioner för att hantera mycket komplexa och tidskrÀvande frÄgor. Det stöder komplexa datatyper (arrayer, strukturer, unioner) samt möjlighet till att utföra arbitrÀra och inbÀddade korrelerade underfrÄgor. Samtidig körning av flera frÄgor stöds, liksom direkt körning av frÄgor frÄn filer i formaten CSV och Parquet. Stöd för import frÄn PostgreSQL-databaser finns ocksÄ.
Projektet anvÀnder en skalÀr frÄn SQLite, en parser frÄn PostgreSQL, Date Math-komponenten frÄn MonetDB, egen implementering av fönsterfunktioner (baserat pÄ Segment Tree Aggregation-algoritmen), en reguljÀra uttrycksbehandlare baserad pÄ RE2-biblioteket, egen frÄgeoptimerare, MVCC-mekanism för hantering av samtidiga uppgiftskörningar (Multi-Version Concurrency Control), samt en vektoriserad frÄgeutförande motor baserad pÄ Hyper-Pipelining Query Execution-algoritmen, som tillÄter att stora vÀrdesets bearbetas i en enda operation.
I den nya versionen:
- Stöd för att lagra databaser i krypterad form har lagts till. Krypteringen anvĂ€nder AES-256-algoritmen i GCM-lĂ€ge. Inte bara huvudfilen med data utan Ă€ven WAL-loggar och tillfĂ€lliga filer krypteras. Nycklar för databasens kryptering anges med kommandot ATTACH via parametern ENCRYPTION_KEY. ATTACH âencrypted.dbâ AS enc_db (ENCRYPTION_KEY âquack_quackâ);
- Stöd för kommandot «MERGE INTO» har lagts till, vilket kan anvÀndas som ett alternativ till uttrycket «INSERT ⊠ON CONFLICT», utan krav pÄ primÀrnyckel och som fungerar med olika alternativ för sammanslagning. Kommandot «MERGE INTO» möjliggör skapande av villkorliga SQL-uttryck som sammanfogar operationerna INSERT, UPDATE och DELETE i ett enda uttryck. Till exempel kan MERGE anvÀndas för att slÄ samman tvÄ tabeller, införa saknade poster och uppdatera befintliga. 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, *;
- Stöd för skrivoperationer med tabeller i Apache Iceberg-format har lagts till. Tidigare stöddes endast lÀsning, vilket gör det möjligt att överföra data mellan Iceberg och DuckDB.
- I kommandoradsklienten har en progressindikator för operationens genomförande lagts till, med en prognos för den ÄterstÄende tiden tills slutförande.
- En fönsterfunktion «FILL» har lagts till, som kan anvÀndas för att interpolera saknade vÀrden inom ordnade fönster. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- TillÀgget Teradata Connector har implementerats för att ansluta till Teradata-databaser. TillÀgget möjliggör manipulation av tabeller, utförande av frÄgor och körning av SQL-kommandon direkt i Teradata, med hjÀlp av DuckDB.
- Stöd för att spara tillstÄnd (checkpoint) av minnestabeller har lagts till, vilket möjliggör stöd för komprimering. Dessutom rensas borttagna rader och frigörs utrymme efter raderingsoperationer nÀr tillstÄndet sparas. ATTACH ':memory:' AS memory_compressed (COMPRESS);
- Flera prestandaoptimeringar har föreslagits: Implementeringen av sortering har övergÄtt till att anvÀnda algoritmen för flervegsammanslagning (k-way merge sort), vilket minskar dataflyttningen. Generella tabelluttryck (Common Table Expression, CTE) materialiseras nu som standard.
KĂ€lla: opennet.ru
