En ny version av databashanteraren DuckDB 1.2.0 har publicerats. Den Àr inriktad pÄ att utföra analytiska frÄgor och liknar konceptuellt SQLite. DuckDB kombinerar egenskaperna hos SQLite, sÄsom kompakthet, dess anvÀndning som en inbÀddad biblioteksmodul, databashantering i en enda fil och CLI-grÀnssnitt, med funktioner och optimeringar för analytiska frÄgor som tÀcker en betydande del av de lagrade data, till exempel genom att aggregera allt innehÄll frÄn tabeller eller sammanfoga flera stora tabeller. Projektkoden Àr skriven i C++ och distribueras under MIT-licensen.
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 nya komprimeringsmetoder har implementerats, vilka inte Ă€r aktiverade som standard för att bevara kompatibiliteten med databashanteringsfiler av tidigare versioner av DuckDB. För att anvĂ€nda det förbĂ€ttrade formatet för databashanteringsfiler har möjlighet att knyta databasen till en versionsnummer introducerats â vid öppning av filen med parametern "STORAGE_VERSION" kan nu minimalt stödd versionsnummer anges ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). SQL-kommandot COPY kan anvĂ€ndas för att konvertera ett nytt format till ett gammalt, till exempel: ATTACH 'file1.db'; ATTACH 'converted_file.db' (STORAGE_VERSION 'v1.0.0'); COPY FROM DATABASE file1 TO converted_file;
- Stöd för SQL-kommandot "ALTER TABLE ⊠ADD PRIMARY KEY" har lagts till för att lÀgga till en primÀrnyckel till en existerande tabell.
- BegrÀnsningen som förhindrade att identiteter med en unikhetsindex lades till igen, om dessa identiteter hade tagits bort i den aktuella transaktionen, har avlÀgsnats. Till exempel ger följande SQL-kod nu ingen felaktighet: 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');
- Stöd för att ladda CSV-filer med teckenkodningar Latin-1 och UTF-16 har lagts till (tidigare stöddes endast teckenkodningen UTF-8). FROM read_csv(âcities-latin-1.csvâ, encoding = âlatin-1â);
- Stöd för att anvĂ€nda flerbytesavgrĂ€nsare (upp till 4 byte) i CSV-filer har lagts till, vilket möjliggör anvĂ€ndning av emoji som avgrĂ€nsare för kolumner. ađŠb hellođŠworld FROM read_csv(âexample.dsvâ, sep = âđŠâ);
- Strikt lĂ€ge för parning av CSV-filer Ă€r som standard aktiverat (âstrict_mode = trueâ), vilket kontrollerar överensstĂ€mmelse med formatet i specifikationen RFC 4180. I strikt lĂ€ge tillĂ„ts endast en symbol för radavgrĂ€nsning, vilket resulterar i ett fel vid försök att bearbeta filer dĂ€r mer Ă€n en symbol anvĂ€nds för radavgrĂ€nsning, inklusive bĂ„de radbrytning och vagnretur (â\r\nâ).
- Den nya algoritmen för att bestÀmma ny rad har implementerats i CSV-parsaren, vilket stöder parallella operationer. AnvÀndningen av den nya algoritmen har ökat hastigheten för CSV-parsning med ungefÀr 15%.
- BegrÀnsningen av radstorlek i CSV-filer har tagits bort (tidigare fick en rad inte överstiga 8 MB).
- Vid export av data i Parquet-format har stöd för hash (ordlistor) och Bloom-filterbaserade index implementerats. Metoden för kompression DELTA_BINARY_PACKED har implementerats, vilket avsevÀrt minskar storleken pÄ Parquet-filer.
- Ett sĂ€kert lĂ€ge har lagts till i kommandoradsgrĂ€nssnittet, aktiverat med alternativet â-safeâ eller kommandot â.safe_modeâ. I detta lĂ€ge Ă€r Ă„tkomst endast tillĂ„ten till den ursprungligen angivna databasen, och försök att öppna andra filer resulterar i ett felmeddelande.
- Autocompletionsfunktionen har förbÀttrats i kommandoradsgrÀnssnittet. Koden för autocompletions har omvandlats för att anvÀnda PEG (Parsing Expression Grammar).
- Vid utförande av kommandon i kommandoradsgrĂ€nssnittet har visningen av stora tal blivit mer överskĂ„dlig, till exempel vid visning av talet 100000000, kommer det att tillĂ€ggas â(100 miljoner)â.
- I SQL har stöd för syntaktik lagts till som gör att förkortade table- och uttrycksnamn kan anges före de vĂ€rden de hĂ€nvisar till (istĂ€llet för att anvĂ€nda syntaktik âuttryck AS namnâ): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- I SELECT-teamet har stödet för operationen "RENAME" implementerats för att byta namn pÄ fÀlt som visas vid angivande av uttrycket "*": SELECT * RENAME (col1 AS new_col1) FROM integers;
- I SELECT-kommandot Ă€r anvĂ€ndningen av operationerna "LIKE" och "SIMILAR TO" tillĂ„ten vid utskrift via "*": SELECT * LIKE âval%â FROM key_val;
- Kvaliteten pÄ generering av pseudo-slumptal har förbÀttrats.
- FrÄgeoptimeraren har moderniserats. Prestandan under TPC-H SF100-testet har ökat med 13%.
- Ett nytt C-liknande API för utveckling av tillÀgg har föreslagits, vilket kan anvÀndas för att skapa nya aggregat- eller tabellfunktioner.
- Stöd för system med standard C-biblioteket Musl har lagts till.
KĂ€lla: opennet.ru
