Udgaven version 1.4.0 af database management systemet DuckDB, der fokuserer på at udføre analytiske forespørgsler og konceptuelt ligner SQLite. DuckDB kombinerer egenskaberne fra SQLite, såsom kompakthed, integration som en indlejret biblioteksfil, opbevaring af databasen i en enkelt fil og CLI-interface, med funktioner og optimeringer til udførelse af analytiske forespørgsler, der dækker en betydelig del af de gemte data, for eksempel ved at udføre aggregering af alle tabelindhold eller sammenfletning af flere store tabeller. Projektkoden er skrevet i C++ og distribueres under MIT-licensen.
DuckDB tilbyder en udvidet SQL-dialekt, der inkluderer ekstra funktioner til behandling af meget komplekse og langvarige forespørgsler. Det er muligt at bruge komplekse typer (arrays, strukturer, unioner), samt udføre vilkårlige og indlejrede korrelerede underforespørgsler. Samtidig udførelse af flere forespørgsler er understøttet, ligesom udførelse af forespørgsler direkte fra filer i formaterne CSV og Parquet. Der er også støtte til import fra SDB PostgreSQL.
Projektet bruger en skal fra SQLite, parser fra PostgreSQL, Date Math-komponent fra MonetDB, sin egen implementering af vinduesfunktioner (baseret på Segment Tree Aggregation-algoritmen), en regex-behandler baseret på RE2-biblioteket, sit eget forespørgselsoptimeringssystem, og MVCC-mekanismen til håndtering af samtidige opgaver (Multi-Version Concurrency Control), samt en vektoriseret forespørgselsudførelse motor baseret på Hyper-Pipelining Query Execution-algoritmen, der muliggør behandling af store værdsæt i én operation.
I den nye version:
- Tilføjet support til at gemme databaser i krypteret form. Krypteringen bruger AES-256 algoritmen i GCM-tilstand. Ikke blot hoveddatafilen, men også WAL-logs og midlertidige filer krypteres. Nøglerne til kryptering af databasen angives via kommandoen ATTACH gennem parameteren ENCRYPTION_KEY. ATTACH ‘encrypted.db’ AS enc_db (ENCRYPTION_KEY ‘quack_quack’);
- Understøttelse af kommandoen „MERGE INTO“ er tilføjet, som kan anvendes som et alternativ til udtrykket „INSERT … ON CONFLICT“, hvilket ikke kræver en primær nøgle og fungerer med vilkårlige sammenfletningsbetingelser. Kommandoen „MERGE INTO“ giver mulighed for at oprette betingede SQL-udtryk, der kombinerer operationer af INSERT, UPDATE og DELETE i ét udtryk. For eksempel kan man med MERGE arrangere sammenfletning af to tabeller ved at indsætte manglende poster og opdatere eksisterende. 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, *;
- Der er tilføjet support til skriveoperationer for at arbejde med tabeller i Apache Iceberg-formatet (tidligere var der kun support til læsning), hvilket muliggør overførsel af data fra Iceberg til DuckDB og omvendt.
- Der er tilføjet en avanceret indikator for fremdrift i kommandolinjeklienten til at forudsige den resterende tid, indtil operationen er afsluttet.
- Den vinduesfunktion „FILL“, som kan bruges til at interpolere manglende værdier i ordnede vinduer, er blevet tilføjet. FROM (VALUES (1, 1), (2, NULL), (3, 42)) t(c1, c2) SELECT fill(c2) OVER (ORDER BY c1) f; 1 21 42
- Teradata Connector-tilføjelsen tilsluttes Teradata-databaser er implementeret. Tilføjelsen muliggør manipulation af tabeller, udførelse af forespørgsler og kørsel af SQL-kommandoer direkte i Teradata ved hjælp af DuckDB.
- Der er tilføjet støtte til at fastholde tilstanden (checkpoint) af in-memory tabeller, hvilket muliggør implementering af kompression. Desuden rengøres de slettede rækker og frigives plads efter sletningsoperationer under tilstandsfiksering. ATTACH ‘:memory:’ AS memory_compressed (COMPRESS);
- Flere ydeevneoptimeringer er blevet foreslået: Implementeringen af sortering er blevet ændret til at bruge k-vejs sammensmeltning (k-way merge sort), som reducerer databevægelse. Almindelige tabeludtryk (Common Table Expression, CTE) materialiseres nu som standard.
Kilde: opennet.ru
