DuckDB 1.2.0, analyyttisiin kyselyihin keskittyvä ja käsitteellisesti SQLitea muistuttava tietokannanhallintajärjestelmä, on julkaistu. DuckDB yhdistää SQLiten kompaktin koon, kytkettävän kirjaston, yhden tiedoston tietokantatallennustilan ja CLI-rajapinnan ominaisuuksiin ja optimointiin analyyttisten kyselyiden suorittamiseen, jotka kattavat suuren osan tallennetusta tiedosta, kuten taulukoiden koko sisällön yhdistäminen tai useiden suurten taulukoiden yhdistäminen. Projektikoodi on kirjoitettu C++-kielellä ja sitä jaetaan MIT-lisenssillä.
DuckDB tarjoaa laajennetun SQL-kielen murteen, joka sisältää lisäominaisuuksia erittäin monimutkaisten ja pitkäkestoisten kyselyiden käsittelyyn. On mahdollista käyttää monimutkaisia tyyppejä (taulukoita, rakenteita, liittoja) sekä suorittaa mielivaltaisia ja sisäkkäisiä korreloituja alikyselyjä. Useiden kyselyjen samanaikainen suorittaminen, kyselyiden suorittaminen suoraan CSV- ja Parquet-tiedostoista on tuettu. Tuonti PostgreSQL DBMS:stä on saatavilla.
Projektissa käytetään SQLiten komentotulkkia, PostgreSQL:n jäsennintä, MonetDB:n Date Math -komponenttia, omaa ikkunatoimintojen toteutusta (perustuu Segment Tree Aggregation -algoritmiin), RE2-kirjastoon perustuvaa säännöllisten lausekkeiden prosessoria, omaa kyselyn optimoijaa, MVCC-mekanismia tehtävien samanaikaisen suorituksen hallintaan, ohjausmoottoriin perustuvaa Concurry the executor -ohjelmaa per-pipelining Query Execution -algoritmi, jonka avulla voidaan käsitellä suuria arvojoukkoja yhdessä operaatiossa.
Uudessa versiossa:
- Toteutettu tuki uusille pakkausmenetelmille, jotka eivät ole oletuksena käytössä, jotta DB-tiedostot ovat yhteensopivia DuckDB:n aiempien versioiden kanssa. Parannetun DB-tiedostomuodon käyttämiseksi on nyt mahdollista sitoa tietokanta versionumeroon - kun avaat tiedoston parametrilla "STORAGE_VERSION", voit nyt määrittää tuetun DB-version vähimmäismäärän ("ATTACH 'file.db' (STORAGE_VERSION 'v1.2.0');"). Muuntaaksesi uuden muodon vanhaksi, voit käyttää SQL COPY -komentoa, esimerkiksi: ATTACH 'tiedosto1.db'; LIITTÄ 'muunnettu_tiedosto.db' (STORAGE_VERSION 'v1.0.0'); KOPIOINTI TIEDOSTOSTA tiedosto1 muutettuun_tiedostoon;
- Lisätty tuki SQL-komennolle "ALTER TABLE … ADD PRIMARY KEY" primääriavaimen lisäämiseksi olemassa olevaan taulukkoon.
- Poistettu rajoitus, joka esti lisäämästä uudelleen tunnisteita, joilla oli yksilöllisyyden seurantaindeksi, jos kyseiset tunnisteet poistettiin nykyisessä tapahtumassa. Esimerkiksi seuraava SQL-koodi ei enää tuota virhettä: CREATE TABLE opiskelijat (ID INTEGER PRIMARY KEY, nimi VARCHAR); INSERT INTO opiskelijoiden ARVOT (1, 'John Doe'); ALKAA; POISTA opiskelijoista WHERE id = 1; INSERT INTO opiskelijoiden ARVOT (1, 'Jane Doe');
- Lisätty tuki CSV-tiedostojen lataamiseen Latin-1- ja UTF-16-koodauksilla (aiemmin vain UTF-8-koodausta tuettiin). FROM read_csv('city-latin-1.csv', koodaus = 'latin-1');
- Lisätty tuki monitavuisten erottimien (enintään 4 tavua) käyttämiselle CSV-tiedostoissa, jolloin voit määrittää emojit sarakeerottimeksi. a🦆b hello🦆world FROM read_csv('example.dsv', sep = '🦆');
- Oletuksena CSV-tiedostojen jäsentämiseen on käytössä tiukka tila ("tiukka_tila = true"), joka tarkistaa, että muotoilu noudattaa RFC 4180 -spesifikaatiota. Tiukassa tilassa vain yksi merkki saa erottaa rivejä, mikä johtaa virheeseen, kun yritetään jäsentää tiedostoja, jotka käyttävät paitsi rivinsyöttömerkkiä, myös rivinvaihtomerkkiä ("\r").
- CSV-jäsentäjä käyttää uutta rivinvaihdon tunnistusalgoritmia, joka tukee toimintojen rinnakkaisua. Uuden algoritmin käyttö nopeutti CSV-jäsennystä noin 15 %.
- Poistettu CSV-tiedostojen rivikoon rajoitus (aiemmin rivi ei saa ylittää 8 Mt).
- Kun tietoja viedään Parquet-muodossa, tuki Bloom-suodattimeen perustuville tiivisteille (sanakirjoille) ja indekseille on otettu käyttöön. DELTA_BINARY_PACKED-pakkausmenetelmä on otettu käyttöön, mikä mahdollistaa merkittävästi pienentää Parquet-tiedostojen kokoa.
- Komentorivikäyttöliittymään on lisätty suojattu tila, joka aktivoidaan "-safe"-vaihtoehdolla tai ".safe_mode"-komennolla. Tässä tilassa pääsy on sallittu vain alun perin määritettyyn tietokantatiedostoon, ja yritys avata muita tiedostoja johtaa virheeseen.
- Komentorivikäyttöliittymässä on parannettu syötteiden automaattista täydennystä. Automaattisen täydennyksen koodi on muutettu käyttämään PEG:tä (Parsing Expression Grammar).
- Kun komentoja suoritetaan komentorivikäyttöliittymässä, on toteutettu suurten lukujen visuaalinen näyttö, esimerkiksi numeroa 100000000 näytettäessä lisätään "(100 miljoonaa)" lisäksi.
- SQL tukee nyt syntaksia, jossa lyhennetyt taulukoiden ja lausekkeiden nimet voidaan määrittää ennen arvoja, joihin ne osoittavat ("lausekkeen AS-nimi" -syntaksin käyttämisen sijaan): SELECT e1: some_long_and_winding_expression, e2: t2.a_column_name FROM t1: long_schema.tbl_name;some_long_table.some
- "SELECT"-komento tukee nyt "RENAME"-toimintoa kenttien uudelleennimeämisessä, kun "*"-lauseke on määritetty: SELECT * RENAME (col1 AS new_col1) FROM kokonaisluvuista;
- "SELECT"-komento sallii "LIKE"- ja "SIMILAR TO" -toimintojen käytön tulostettaessa "*"-komentoa käyttäen: SELECT * LIKE 'val%' FROM key_val;
- Parempi pseudosatunnaislukujen luomisen laatu.
- Kyselyn optimoija on modernisoitu. Suorituskyky TPC-H SF100 -testissä on parantunut 13 %.
- Lisäosien kehittämiseen ehdotetaan uutta C-tyyppistä API:ta, jota voidaan käyttää esimerkiksi uusien aggregaatti- tai taulukkofunktioiden luomiseen.
- Lisätty tuki järjestelmille, joissa on vakio C-kirjasto Musl.
Lähde: opennet.ru
