S'ha llançat DuckDB 1.2.0, un DBMS centrat en consultes analítiques i conceptualment similar a SQLite. DuckDB combina la mida compacta de SQLite, la biblioteca connectable, l'emmagatzematge de bases de dades d'un sol fitxer i la interfície CLI amb capacitats i optimitzacions per executar consultes analítiques que abasten una gran part de les dades emmagatzemades, com ara agregar tot el contingut de les taules o combinar diverses taules grans. El codi del projecte està escrit en C++ i es distribueix sota la llicència MIT.
DuckDB proporciona un dialecte estès del llenguatge SQL que inclou capacitats addicionals per gestionar consultes molt complexes i de llarga durada. És possible utilitzar tipus complexos (matrius, estructures, unions), així com executar subconsultes correlacionades arbitràries i imbricades. S'admet l'execució simultània de múltiples consultes, l'execució de consultes directament des de fitxers CSV i Parquet. El suport per a la importació des del SGBD PostgreSQL està disponible.
El projecte utilitza un intèrpret d'ordres de SQLite, un analitzador de PostgreSQL, un component Date Math de MonetDB, la seva pròpia implementació de funcions de finestra (basada en l'algoritme d'agregació d'arbres de segments), un processador d'expressions regulars basat en la biblioteca RE2, el seu propi optimitzador de consultes, un mecanisme MVCC per gestionar l'execució simultània de tasques i un motor d'execució de tasques basat en Hyper-Version (Control de monedes). Algorisme d'execució de consultes, que permet processar grans conjunts de valors en una sola operació.
En la nova versió:
- S'ha implementat suport per a nous mètodes de compressió que no estan habilitats per defecte per mantenir la compatibilitat dels fitxers de base de dades amb versions anteriors de DuckDB. Per utilitzar el format de fitxer de base de dades millorat, ara és possible lligar la base de dades al número de versió: quan obriu un fitxer amb el paràmetre "STORAGE_VERSION", ara podeu especificar la versió mínima de la base de dades admesa ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). Per convertir el nou format a l'antic, podeu utilitzar l'ordre SQL COPY, per exemple: ATTACH 'fitxer1.db'; Adjuntar 'converted_file.db' (STORAGE_VERSION 'v1.0.0'); COPIAR DE LA BASE DE DADES fitxer1 A fitxer_convertit;
- S'ha afegit suport per a l'ordre SQL "ALTER TABLE... ADD PRIMARY KEY" per afegir una clau primària a una taula existent.
- S'ha eliminat una restricció que impedia tornar a afegir identificadors que tenien un índex de seguiment d'unicitat si aquests identificadors s'havien suprimit a la transacció actual. Per exemple, el codi SQL següent ja no produeix cap error: estudiants CREATE TABLE (id INTEGER PRIMARY KEY, nom VARCHAR); INSERT INTO students VALUES (1, 'John Doe'); COMENÇAR; ELIMINAR DELS estudiants ON id = 1; INSERT INTO students VALUES (1, 'Jane Doe');
- S'ha afegit suport per carregar fitxers CSV en codificacions Latin-1 i UTF-16 (abans només s'admetia la codificació UTF-8). FROM read_csv('cities-latin-1.csv', codificació = 'latin-1');
- S'ha afegit compatibilitat per utilitzar separadors de diversos bytes (fins a 4 bytes) als fitxers CSV, la qual cosa us permet especificar emoji com a separador de columnes. a🦆b hola🦆world FROM read_csv('example.dsv', sep = '🦆');
- De manera predeterminada, el mode estricte està habilitat per analitzar fitxers CSV ("strict_mode = true"), que comprova que el format compleix l'especificació RFC 4180. En mode estricte, només es permet un caràcter per separar línies, cosa que provocarà un error quan s'intenta analitzar fitxers que utilitzen no només el caràcter d'avançament de línia, sinó també el caràcter de retorn de carro ("\r\n).
- L'analitzador CSV utilitza un nou algorisme de detecció de nova línia que admet la paral·lelització d'operacions. L'ús del nou algorisme va accelerar l'anàlisi CSV aproximadament un 15%.
- S'ha eliminat la limitació de la mida de la línia als fitxers CSV (abans la línia no hauria de superar els 8 MB).
- Quan s'exporten dades en format Parquet, s'implementa el suport per a hash (diccionaris) i índexs basats en el filtre Bloom. S'ha implementat el mètode de compressió DELTA_BINARY_PACKED, que permet reduir significativament la mida dels fitxers Parquet.
- S'ha afegit un mode segur a la interfície de línia d'ordres, activat mitjançant l'opció "-safe" o l'ordre ".safe_mode". En aquest mode, només es permet l'accés al fitxer de base de dades especificat inicialment, i un intent d'obrir altres fitxers donarà lloc a un error.
- La interfície de línia d'ordres ha millorat l'autocompleció d'entrada. El codi d'autocompleció s'ha convertit per utilitzar PEG (Parsing Expression Grammar).
- Quan s'executen ordres a la interfície de la línia d'ordres, s'ha implementat una visualització de grans números, per exemple, quan es mostra el número 100000000, s'afegirà addicionalment "(100 milions)".
- Ara SQL admet una sintaxi on es poden especificar noms abreujats de taules i expressions abans dels valors als quals apunten (en lloc d'utilitzar la sintaxi del "nom d'expressió AS"): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.some_long_table_names.t2:;
- L'ordre "SELECT" ara admet l'operació "RENAME" per canviar el nom dels camps de sortida quan s'especifica l'expressió "*": SELECT * RENAME (col1 AS new_col1) FROM enters;
- L'ordre "SELECT" permet l'ús d'operacions "M'agrada" i "SIMIL A" quan s'emet a través de "*": SELECT * LIKE 'val%' FROM key_val;
- Millora de la qualitat de la generació de números pseudoaleatoris.
- S'ha modernitzat l'optimitzador de consultes. El rendiment a la prova TPC-H SF100 ha augmentat un 13%.
- Es proposa una nova API semblant a C per desenvolupar complements, que es pot utilitzar, per exemple, per crear noves funcions agregades o de taula.
- S'ha afegit suport per a sistemes amb la biblioteca C estàndard Musl.
Font: opennet.ru
