+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: kāpēc savienojumi vairs neuztur rindu secību

Polars 2.0 pēc noklusējuma palaiž kolektoru straumēšanas dzinējā.

Polars 2.0 pēc noklusējuma palaiž kolektoru straumēšanas dzinējā. Savienošanai (join), grupēšanai (group_by) un apgriešanai (unpivot) jaunā versija vairs negarantē ievades rindu secību, ja vien jūs to skaidri nenorādāt, izmantojot maintain_order vai sort. Mūsu testā ar Polars 2.0.0, 2 000 000 rindu iekšējais savienojums pēc noklusējuma atgrieza rindas ārpus ievades secības un saglabāja secību, kad maintain_order tika iestatīts. Versija arī ieslēdz datu izvadi ārpus kodola (out-of-core spilling) un padara etalonu apgalvojumus par paša pārdevēja apgalvojumiem.

Lasiet rakstisko izdevumu (angļu valodā) ↗

Ko aptver šis video

  • Izsaucot collect() vaicājumam ar "lazy" izpildi, tagad pēc noklusējuma tiek izmantots straumēšanas dzinējs, kas negarantē rindu secību savienošanas, grupēšanas un apgriešanas operācijām.
  • Migrācijas ceļvedis norāda, ka secība vairs nav tāda pati kā pirms 2.0 versijas un netiek garantēta; tas iesaka veikt skaidru kārtošanu, ja jūs uz to paļaujaties.
  • Mūsu testā, noklusējuma iekšējais savienojums atgrieza ievades secību False; maintain_order="left_right" savienojumā atgrieza True. Viena mašīna, viena izpilde, viena savienojuma forma.
  • Datu izvade ārpus kodola (Out-of-core spilling) ir ieslēgta pēc noklusējuma: tā sākas aptuveni pie 80% RAM, ar 64 GB noklusējuma diska budžetu. Out-of-core savienojumi un grupēšana ir ceļvedī.
  • collect_schema() uztver trūkstošu kolonnu pirms jebkādu datu nolasīšanas, bet pārveidošana, kas neizdodas vienā vērtībā, neizdodas tikai pie collect().
  • TPC-H un TPC-DS salīdzinājums ir paša pārdevēja veikts tests ar atvasinātiem datiem, un tā zemsvītras piezīme norāda, ka rezultāti nav salīdzināmi ar oficiālajiem etaloniem.

Tulkotais transkripts

Tulkojums no oriģinālā angļu stāstījuma. Pieejamais audio un subtitri tiek kontrolēti no YouTube.

Kāpēc mainījās noklusējuma secība?

0:00 Jūs domājat, ka savienojums atgriež jūsu rindas tādā secībā, kādā tās ierakstījāt. Polars 2.0 apzināti pārtrauca to garantēt pēc noklusējuma. Šajā video: kāpēc mainījās noklusējuma iestatījums? Ko tas deva? Un kurš no jūsu skriptiem sabojāsies pirmais? Šis ir The Daily Diff, ieskatoties zem pārsega. Polars ir atvērtā koda DataFrame bibliotēka: tabulas dzinējs, ko izsauc no Python,

0:20 ar tās kodolu, kas rakstīts Rust valodā. Tas ir bezmaksas saskaņā ar MIT licenci, un to instalē ar pip install polars. Vispirms viena detaļa. Slēdzis, kas atgriež veco secību, ir arguments pašam savienojumam. Es pie tā atgriezīšos beigās. Kopš 2.0 versijas collect pēc noklusējuma izmanto straumēšanas dzinēju. Straumēšana sadala vaicājumu blokos, kas tiek izpildīti paralēli, un bloki beidzas, kad tie beidzas.

0:42 Savienošanas, grupēšanas un apgriešanas operācijām versija negarantē secību. Kurš cietīs pirmais? Ikviens, kurš salīdzina izvadi ar saglabātu failu, rindu pa rindai. Šis tests var iziet jūsu klēpjdatorā un neiziet citā mašīnā. Tālāk, migrācijas ceļvedis.

Ko sola migrācijas ceļvedis?

0:57 Tas norāda, ka precīza rindu secība, kas parādīta iepriekš, netiek garantēta. Tāpēc, ja jūs paļaujaties uz secību, kārtojiet skaidri. Datu izvade ārpus kodola ir ieslēgta pēc noklusējuma. Tā sāk izvadīt datus diskā, kad ir sasniegti aptuveni astoņdesmit procenti RAM, ar sešdesmit četru gigabaitu budžetu. Kārtošana, loga funkcijas un daudzas izteiksmes tagad var izvadīt datus. Savienojumi un grupēšana nāk drīz.

Vai etalons ir godīga cīņa?

1:17 Polars apgalvo, ka tas pārspēj DataFusion un DuckDB TPC-H un TPC-DS etalonos. Skaitļi nāk no viņu pašu testiem, ar atvasinātiem datiem, un to zemsvītras piezīme norāda, ka tie nav salīdzināmi ar oficiālajiem rezultātiem. Viņu pašu skaitļi liecina, ka Polars kļūst aptuveni trīs komats astoņas reizes ātrāks no sešpadsmit kodoliem līdz simts deviņdesmit diviem TPC-H. Viņi arī saka, ka lielās mašīnas papildu pavedieni palēnina mazus vaicājumus.

Ko mēs redzam, kad mēs to palaižam?

1:41 Mēs divas reizes palaidām to pašu savienojumu Polars 2.0.0. Noklusējuma izpilde sajauc rindas. Ar karodziņu, ievades secība saglabājas. Atrodiet savienojumus, kas nodrošina testu. Jebkurš savienojums bez kārtošanas pēc tam ir rindu secības lēmums, ko jūs nekad nepieņēmāt. Polars 2.0 ir stingrāks attiecībā uz tipiem.

Vai stingrāks nozīmē agrāk?

1:58 Shemas pārbaude uztver trūkstošu kolonnu pirms jebkādu datu nolasīšanas. Tā nevar uztvert pārveidošanu, kas neizdodas vienā rindā, jo šī kļūda gaida datus. Tagad cilpa, ko es atvēru.

Kā atgūt veco secību?

2:08 Slēdzis atrodas uz savienojuma. Iestatiet maintain order uz savienojuma, vai pievienojiet kārtošanu pēc tā. Ceļvedis iesaka kārtošanu. Savienojuma karodziņš saglabāja secību mūsu testā, ar kreisās puses secību, kas saglabāta kā pa kreisi, pa labi. Spriedums, zem pārsega: NEEDS REVIEW.

Kāds ir spriedums?

2:22 Es pārskatītu katru savienojumu pirms jaunināšanas. Vai ir jautājumi par to? Ielieciet to komentāros. Un tas ir šodienas atšķirība. Esmu Niko no Axrisi. Apvienojiet atbildīgi.

Avoti

  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

Saistītie video