+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: miksi liitokset eivät enää säilytä rivijärjestystään

Polars 2.0 suorittaa keräyksen oletuksena suoratoistomoottorilla.

Polars 2.0 suorittaa keräyksen oletuksena suoratoistomoottorilla. Liitoksille, ryhmittelyille ja rivien kääntämisille (unpivot) julkaisu ei enää takaa syöttörivien järjestystä, ellet aseta maintain_order- tai sort-parametreja erikseen. Testissämme Polars 2.0.0:lla 2 000 000 rivin sisäinen liitos palautti rivit oletuksena eri järjestyksessä kuin syöte, mutta säilytti järjestyksen maintain_order-asetuksen ollessa päällä. Julkaisu ottaa käyttöön myös ulkoisen muistin (out-of-core) käytön ja tekee vertailuarvoväitteistä toimittajan omia.

Lue kirjoitettu versio (englanniksi) ↗

Mitä tämä video käsittelee

  • Kutsuttaessa collect()-funktiota laiskalla kyselyllä käytetään nyt oletuksena suoratoistomoottoria, joka ei takaa rivijärjestystä liitoksissa, ryhmittelyissä ja rivien kääntämisissä.
  • Siirto-opas sanoo, että järjestys ei enää ole ennen 2.0-versiota ollut järjestys eikä sitä taata; se suosittelee nimenomaista lajittelua, jos olet siitä riippuvainen.
  • Testissämme oletusarvoinen sisäinen liitos palautti syötejärjestyksen epätodeksi; maintain_order="left_right" liitoksessa palautti toden. Yksi kone, yksi ajo, yksi liitosmuoto.
  • Ulkoisen muistin (out-of-core) käyttö on oletuksena päällä: se alkaa siirtää tietoa levylle noin 80 % RAM-muistista, oletuksena 64 GB levytilalla. Ulkoisen muistin liitokset ja ryhmittelyt ovat tiekartalla.
  • collect_schema() havaitsee puuttuvan sarakkeen ennen kuin dataa luetaan, mutta valun epäonnistuessa vain yhden arvon kohdalla, se epäonnistuu vasta collect()-kutsussa.
  • TPC-H- ja TPC-DS-vertailu on toimittajan oma ajo johdetulla datalla, ja sen alaviite sanoo, että tulokset eivät ole vertailukelpoisia virallisten vertailuarvojen kanssa.

Käännetty transkriptio

Käännetty alkuperäisestä englanninkielisestä selostuksesta. Käytettävissä olevan äänen ja tekstitysten hallinta tapahtuu YouTuben kautta.

Miksi oletusjärjestys muuttui?

0:00 Luulisi, että liitos palauttaa rivisi samassa järjestyksessä kuin kirjoitit ne. Polars 2.0 lopetti sen lupaamisen, oletuksena, tarkoituksella. Tässä videossa: miksi oletus muuttui? Mitä se toi tullessaan? Ja mikä skripteistäsi hajoaa ensin? Tämä on The Daily Diff, konepellin alta. Polars on avoimen lähdekoodin DataFrame-kirjasto: taulumoottori, jota kutsut Pythonista,

0:20 ja jonka ydin on kirjoitettu Rustilla. Se on ilmainen MIT-lisenssin alaisena, ja asennat sen komennolla pip install polars. Yksi yksityiskohta ensin. Kytkin, joka palauttaa vanhan järjestyksen, on itse liitoksen argumentti. Palaan siihen lopussa. Versiosta 2.0 alkaen collect suorittaa oletuksena suoratoistomoottorin. Suoratoisto jakaa kyselyn paloiksi, jotka suoritetaan rinnakkain, ja palat valmistuvat silloin, kun ne valmistuvat.

0:42 Liitoksille, ryhmittelyille ja rivien kääntämisille (unpivot) julkaisu ei lupaa järjestystä. Kuka joutuu kärsimään ensin? Kuka tahansa, joka vertaa tulostetta tallennettuun tiedostoon, rivi riviltä. Tuo testi voi mennä läpi kannettavallasi ja epäonnistua eri koneella. Seuraavaksi, siirto-opas.

Mitä siirto-opas lupaa?

0:57 Se sanoo, että edellä esitettyä tarkkaa rivijärjestystä ei taata. Joten jos olet riippuvainen järjestyksestä, lajittele nimenomaisesti. Ulkoisen muistin (out-of-core) käyttö on myös oletuksena päällä. Se alkaa siirtää tietoa levylle noin 80 prosentissa RAM-muistista, 64 gigatavun budjetilla. Lajittelu, ikkunafunktiot ja monet lausekkeet voivat nyt siirtää tietoa levylle. Liitokset ja ryhmittelyt ovat tulossa.

Onko vertailu reilu kilpailu?

1:17 Polars sanoo voittavansa DataFusionin ja DuckDB:n TPC-H- ja TPC-DS- vertailuissa. Luvut tulevat heidän omista ajoistaan, johdetulla datalla, ja heidän alaviitteensä sanoo, että ne eivät ole vertailukelpoisia virallisiin tuloksiin. Heidän omien lukujensa mukaan Polars nopeutuu noin 3,8-kertaisesti kuudestatoista ytimestä sataan yhdeksäänkymmeneen kahteen TPC-H:ssa. He sanovat myös, että suuren koneen ylimääräiset säikeet hidastavat pieniä kyselyitä.

Mitä näemme, kun ajamme sen?

1:41 Ajoimme saman liitoksen kahdesti Polars 2.0.0:lla. Oletusajo sekoittaa rivit. Lipulla syötteen järjestys säilyy. Etsi liitokset, jotka syöttävät testin. Mikä tahansa liitos ilman sen jälkeistä lajittelua on rivijärjestyspäätös, jota et koskaan tehnyt. Polars 2.0 on tiukempi tyyppien suhteen.

Tarkoittaako tiukempi aikaisempaa?

1:58 Skeematarkastus havaitsee puuttuvan sarakkeen ennen kuin dataa luetaan. Se ei voi havaita valuoperaatiota, joka epäonnistuu yhdellä rivillä, koska tämä virhe odottaa dataa. Nyt avaamani silmukka.

Miten saan vanhan järjestyksen takaisin?

2:08 Kytkin on liitoksessa. Aseta maintain_order liitokseen tai lisää lajittelu sen jälkeen. Opas ehdottaa lajittelua. Liitoslippu säilytti järjestyksen ajossamme, vasemman puolen järjestyksen säilyttäen vasen, oikea. Tuomio, konepellin alta: NEEDS REVIEW.

Mikä on tuomio?

2:22 Tarkistaisin jokaisen liitoksen ennen päivittämistä. Onko sinulla kysyttävää tästä? Laita se kommentteihin. Ja se on päivän ero. Olen Niko Axrisista. Yhdistä vastuullisesti.

Lähteet

  1. Release of Polars 2.0Polars (pola.rs)
  2. Polars 2.0 upgrade guidePolars documentation
  3. Polars homepagePolars (pola.rs)
  4. polars-2.0-benchmark repositoryPolars on GitHub
  5. Release of Polars 2.0 (Hacker News discussion)Hacker News

Aiheeseen liittyvät videot