Byla vydána verze databázového systému DuckDB 1.2.0, zaměřená na provádění analytických dotazů a konceptuálně připomínající SQLite. DuckDB kombinuje vlastnosti SQLite, jako je kompaktnost, připojení ve formě vestavěné knihovny, ukládání databáze do jednoho souboru a CLI rozhraní, s možnostmi a optimalizacemi pro provádění analytických dotazů, které zahrnují značnou část uložených dat, například provádění agregace veškerého obsahu tabulek nebo sloučení několika velkých tabulek. Kód projektu je napsán v jazyce C++ a je distribuován pod licencí MIT.
DuckDB poskytuje rozšířený dialekt jazyka SQL, který zahrnuje další možnosti pro zpracování velmi složitých a dlouho běžících dotazů. Je možné používat složité typy (pole, struktury, unie), jakož i vykonávat libovolné a vnořené korelované poddotazy. Podporuje se současné provádění několika dotazů a možnost spouštět dotazy přímo z souborů ve formátech CSV a Parquet. Je dostupná podpora importu z databázového systému PostgreSQL.
Projekt využívá shell ze SQLite, parser z PostgreSQL, komponentu Date Math z MonetDB, vlastní implementaci okenních funkcí (na základě algoritmu Segment Tree Aggregation), zpracovatele regulárních výrazů založeného na knihovně RE2, vlastní optimalizátor dotazů, MVCC mechanismus správy současného vykonávání úloh (Multi-Version Concurrency Control) a vektorový engine pro vykonávání dotazů na základě algoritmu Hyper-Pipelining Query Execution, který umožňuje zpracovávat velké sady hodnot v jednom kroku.
V nové verzi:
- Byla implementována podpora nových metod komprese, které nejsou ve výchozím nastavení zahrnuty pro zajištění kompatibility databázových souborů s předchozími verzemi DuckDB. Pro využití vylepšeného formátu databázových souborů je nabízena možnost přiřazení databáze k verzi — při otevření souboru pomocí parametru „STORAGE_VERSION“ je nyní možné nastavit minimálně podporovanou verzi databáze („ATTACH ‘file.db’ (STORAGE_VERSION ‘v1.2.0’);“). Pro převod nového formátu na starý lze použít SQL příkaz COPY, například: ATTACH ‘file1.db’; ATTACH ‘converted_file.db’ (STORAGE_VERSION ‘v1.0.0’); COPY FROM DATABASE file1 TO converted_file;
- Byla přidána podpora SQL příkazu „ALTER TABLE … ADD PRIMARY KEY“ pro přidání primárního klíče k existující tabulce.
- Bylo odstraněno omezení, které bránilo opětovnému přidávání identifikátorů, pro které existuje index sledování jedinečnosti, pokud byly tyto identifikátory odstraněny v aktuální transakci. Například následující SQL kód nyní nevede k chybě: 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’);
- Byla přidána podpora načítání CSV souborů v kódování Latin-1 a UTF-16 (dříve bylo podporováno pouze kódování UTF-8). FROM read_csv(‘cities-latin-1.csv’, encoding = ‘latin-1’);
- Byla přidána podpora používání vícibytných oddělovačů (až 4 bajty) v CSV souborech, což umožňuje používat emoji jako oddělovač sloupců. a🦆b hello🦆world FROM read_csv(‘example.dsv’, sep = ‘🦆’);
- Ve výchozím nastavení je zahrnut přísný režim analýzy CSV souborů ("strict_mode = true"), který kontroluje shodu s formátováním podle specifikace RFC 4180. V přísném režimu je povoleno použít pouze jeden znak pro oddělení řádků, což povede k chybě při pokusu o analýzu souborů, které k oddělení řádků používají nejen znak nové řádky, ale také znak návratu kurzu (" ").
- V parseru CSV byl zaveden nový algoritmus pro určení nového řádku, který podporuje paralelní operace. Použití nového algoritmu urychlilo analýzu CSV přibližně o 15%.
- Bylo odstraněno omezení na velikost řádku v CSV souborech (dříve řádek neměl překročit 8 MB).
- Při exportu dat ve formátu Parquet byla implementována podpora hashů (slovníků) a filtrů na základě Bloomova filtru. Byla implementována metoda komprese DELTA_BINARY_PACKED, která umožňuje značné zmenšení velikosti Parquet souborů.
- Do rozhraní příkazového řádku byl přidán bezpečný režim, který je aktivován pomocí možnosti "-safe" nebo příkazu "safe_mode". V tomto režimu je povolen přístup pouze k původně určenému souboru databáze, přičemž pokus o otevření jiných souborů povede k vyvolání chyby.
- V rozhraní příkazového řádku bylo vylepšeno automatické doplňování vstupu. Kód pro automatické doplňování byl převeden na použití PEG (parsing expression grammar).
- Při provádění příkazů v rozhraní příkazového řádku byla implementována vizuální reprezentace velkých čísel, například při zobrazení čísla 100000000 se navíc připojí "(100 milionů)".
- Do SQL byla přidána podpora syntaxe, která umožňuje zkrácené názvy tabulek a výrazů uvádět před hodnotami, na které odkazují (namísto použití syntaxe "výraz AS název"): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_name, t2: short_s.tbl;
- V příkazu "SELECT" byla implementována podpora operace "RENAME" pro přejmenování polí, která jsou zobrazena při použití výrazu „*": SELECT * RENAME (col1 AS new_col1) FROM integers;
- V příkazu "SELECT" bylo povoleno použití operací "LIKE" a "SIMILAR TO" při výstupu přes "*": SELECT * LIKE 'val%' FROM key_val;
- Byla zvýšena kvalita generování pseudonáhodných čísel.
- Byl modernizován optimalizátor dotazů. Výkon při průchodu testem TPC-H SF100 se zvýšil o 13 %.
- Byl navržen nový API podobný C pro vývoj doplňků, který lze použít například k vytváření nových agregačních nebo tabulkových funkcí.
- Byla přidána podpora systémů se standardní knihovnou C Musl.
Zdroj: opennet.ru
