De release van de DuckDB-databaseversie 1.2.0 is gepubliceerd, die gericht is op analytische query's en conceptueel lijkt op SQLite. DuckDB combineert de eigenschappen van SQLite, zoals compactheid, integratie als een inbeddingsbibliotheek, opslag van de database in één bestand en een CLI-interface, met mogelijkheden en optimalisaties voor het uitvoeren van analytische query's, die een aanzienlijk deel van de opgeslagen gegevens bestrijken, bijvoorbeeld het aggregeren van de volledige inhoud van tabellen of het samenvoegen van meerdere grote tabellen. De code van het project is geschreven in C++ en wordt verspreid onder de MIT-licentie.
DuckDB biedt een uitgebreide SQL-dialect, inclusief extra mogelijkheden voor het verwerken van zeer complexe en langdurige queries. Het is mogelijk om complexe types (arrays, structuren, unions) te gebruiken, evenals het uitvoeren van willekeurige en geneste correlerende subqueries. Gelijktijdige uitvoering van meerdere queries wordt ondersteund, evenals het direct uitvoeren van queries vanuit bestanden in CSV- en Parquet-formaten. Ondersteuning voor import vanuit PostgreSQL-databases is beschikbaar.
Het project maakt gebruik van een shell van SQLite, een parser van PostgreSQL, een Date Math-component van MonetDB, een eigen implementatie van venstervariabelen (gebaseerd op het Segment Tree Aggregation-algoritme), een reguliere expressie-verwerker op basis van de RE2-bibliotheek, een eigen query-optimalisator, een MVCC-mechanisme voor het beheer van gelijktijdige taakuitvoering (Multi-Version Concurrency Control), en ook een gevectoriseerde query-uitvoeringsengine op basis van het Hyper-Pipelining Query Execution-algoritme, waarmee grote sets waarden in één operatie tegelijk kunnen worden verwerkt.
In de nieuwe versie:
- Er is ondersteuning geïmplementeerd voor nieuwe compressiemethoden, die standaard niet zijn ingeschakeld om compatibiliteit van databasebestanden met eerdere versies van DuckDB te behouden. Voor het gebruik van het verbeterde databasebestandsformaat is de mogelijkheid aangeboden om de database aan een versienummer te koppelen — bij het openen van een bestand met de parameter 'STORAGE_VERSION' kan nu de minimaal ondersteunde databaseversie worden opgegeven ('ATTACH ‘file.db’ (STORAGE_VERSION ‘v1.2.0’);'). Voor het converteren van het nieuwe formaat naar het oude kan de SQL-opdracht COPY worden gebruikt, bijvoorbeeld: ATTACH ‘file1.db’; ATTACH ‘converted_file.db’ (STORAGE_VERSION ‘v1.0.0’); COPY FROM DATABASE file1 TO converted_file;
- Ondersteuning voor de SQL-opdracht 'ALTER TABLE … ADD PRIMARY KEY' is toegevoegd om een primaire sleutel toe te voegen aan een bestaande tabel.
- De beperking is verwijderd die het niet toestond om identificaties opnieuw toe te voegen waarvoor een uniekheidsindex aanwezig was, indien deze identificaties in de huidige transactie waren verwijderd. Bijvoorbeeld, de onderstaande SQL-code leidt nu niet meer tot een fout: 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’);
- Ondersteuning voor het importeren van CSV-bestanden in de coderingen Latin-1 en UTF-16 is toegevoegd (vroeger werd alleen UTF-8 ondersteund). FROM read_csv(‘cities-latin-1.csv’, encoding = ‘latin-1’);
- Ondersteuning voor het gebruik van meerbyte scheidingstekens (tot 4 bytes) in CSV-bestanden is toegevoegd, wat het mogelijk maakt om emoji's als kolomscheidingstekens op te geven. a🦆b hello🦆world FROM read_csv(‘example.dsv’, sep = ‘🦆’);
- Standaard is de strikte modus voor het parseren van CSV-bestanden ingeschakeld ("strict_mode = true"), die de conformiteit met de RFC 4180 specificatie controleert. In de strikte modus is het gebruik van slechts één karakter voor het scheiden van rijen toegestaan, wat leidt tot een fout bij het parseren van bestanden waarbij niet alleen het nieuwe regelkarakter maar ook het terugloopkarakter ("\r\n") wordt gebruikt.
- De CSV-parser maakt gebruik van een nieuw algoritme voor het bepalen van nieuwe regels, dat parallelle operaties ondersteunt. Het gebruik van het nieuwe algoritme heeft de parsing van CSV-bestanden met ongeveer 15% versneld.
- De beperking op de grootte van rijen in CSV-bestanden is opgeheven (voorheen mocht een rij niet groter zijn dan 8 MB).
- Bij het exporteren van gegevens in Parquet-formaat is ondersteuning toegevoegd voor hashes (woordenboeken) en indexen op basis van Bloom-filters. De DELTA_BINARY_PACKED compressiemethode is geïmplementeerd, waardoor de grootte van Parquet-bestanden aanzienlijk kan worden verkleind.
- De commandoregelinterface heeft een veilige modus toegevoegd, die geactiveerd kan worden met de optie "-safe" of het commando ".safe_mode". In deze modus is alleen toegang tot het oorspronkelijk opgegeven databasebestand toegestaan, en zal een poging om andere bestanden te openen resulteren in een foutmelding.
- In de commandoregelinterface is het automatisch aanvullen van invoer verbeterd. De code voor automatisch aanvullen is omgezet naar het gebruik van PEG (Parsing Expression Grammar).
- Bij het uitvoeren van commando's in de commandoregelinterface is er een visuele weergave van grote getallen geïmplementeerd; bijvoorbeeld, bij het weergeven van het nummer 100000000, zal "(100 miljoen)" worden toegevoegd.
- In SQL is ondersteuning toegevoegd voor een syntaxis waarbij afgekorte namen voor tabellen en expressies vóór de waarden die ze aanduiden kunnen worden gespecificeerd (in plaats van de syntaxis "expressie AS naam" te gebruiken): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- In het commando "SELECT" is ondersteuning geïmplementeerd voor de "RENAME" operatie om velden te hernoemen die worden weergegeven wanneer de expressie "*" wordt opgegeven: SELECT * RENAME (col1 AS new_col1) FROM integers;
- In het commando "SELECT" is het gebruik van de operaties "LIKE" en "SIMILAR TO" toegestaan bij de uitvoer via "*": SELECT * LIKE 'val%' FROM key_val;
- De kwaliteit van de generatie van pseudo-willekeurige getallen is verbeterd.
- De query-optimizer is gemoderniseerd. De prestaties tijdens de TPC-H SF100-test zijn met 13% verhoogd.
- Er is een nieuwe C-achtige API voorgesteld voor de ontwikkeling van extensies, die kan worden gebruikt voor het creëren van nieuwe aggregaat- of tabelfuncties.
- Ondersteuning voor systemen met de standaard C-bibliotheek Musl is toegevoegd.
Bron: opennet.ru
