# Polars 2.0: zašto spajanja više ne zadržavaju redosled redova

Published: 2026-10-08

Polars 2.0 podrazumevano pokreće prikupljanje (collect) na striming motoru. Za spajanje (join), grupisanje (group\_by) i pivotiranje (unpivot), izdanje više ne garantuje redosled ulaznih redova osim ako eksplicitno ne postavite maintain\_order ili sort. U našem testiranju na Polars 2.0.0, unutrašnje spajanje od 2.000.000 redova je podrazumevano vratilo redove van ulaznog redosleda i zadržalo redosled sa postavljenim maintain\_order. Izdanje takođe uključuje prelivanje van jezgra (out-of-core spilling) i čini tvrdnje o benčmarku svojstvenim dobavljaču.

Canonical: https://thedailydiff.dev/sr-Latn/video/polars-2-row-order/

## Šta ovaj video pokriva

- Pozivanje collect() na lenjom upitu sada podrazumevano koristi striming motor, koji ne garantuje redosled redova za join, group\_by i unpivot.
- Vodič za migraciju kaže da redosled više nije redosled pre 2.0 i da nije zagarantovan; preporučuje eksplicitno sortiranje ako se oslanjate na njega.
- U našem testu, podrazumevano unutrašnje spajanje vratilo je ulazni redosled False; maintain\_order="left\_right" na spajanju vratilo je True. Jedna mašina, jedno izvršavanje, jedan oblik spajanja.
- Prelivanje van jezgra (Out-of-core spilling) je podrazumevano uključeno: počinje na oko 80 % RAM-a, sa podrazumevanim budžetom diska od 64 GB. Spajanje i grupisanje van jezgra su na mapi puta.
- collect\_schema() hvata nedostajuću kolonu pre nego što se bilo koji podatak pročita, ali konverzija (cast) koja ne uspeva samo na jednoj vrednosti ne uspeva tek kod collect().
- Poređenje TPC-H i TPC-DS je sopstveno testiranje dobavljača na izvedenim podacima, a njihova fusnota kaže da rezultati nisu uporedivi sa zvaničnim benčmarcima.

## Poglavlja

- 0:00 Zašto se podrazumevani redosled promenio?
- 0:56 Šta obećava vodič za migraciju?
- 1:17 Da li je benčmark fer borba?
- 1:41 Šta vidimo kada ga pokrenemo?
- 1:56 Da li strože znači ranije?
- 2:07 Kako da vratim stari redosled?
- 2:20 Kakva je presuda?

## Preveden transkript

Prevedeno sa originalne engleske naracije. Dostupan audio i titlovi kontrolisani su od strane YouTube-a.

### Zašto se podrazumevani redosled promenio?

0:00 Mislite da spajanje vraća redove onim redosledom kojim ste ih napisali. Polars 2.0 je prestao to da obećava, podrazumevano, namerno. U ovom videu: zašto se podrazumevani redosled promenio? Šta je dobio time? I koji od vaših skripti će se prvi pokvariti? Ovo je The Daily Diff, ispod haube. Polars je open-source DataFrame biblioteka: motor tabele koji pozivate iz Pythona,

0:20 sa svojim jezgrom napisanim u Rustu. Besplatan je pod MIT licencom i instalirate ga sa pip install polars. Prvo jedan detalj. Prekidač koji vraća stari redosled je argument samom spajanju. Vratiću se na to na kraju. Od verzije 2.0, collect podrazumevano pokreće striming motor. Striming deli upit na delove koji se izvršavaju paralelno, i delovi se završavaju kada se završe.

0:42 Za join, group by i unpivot, izdanje ne obećava redosled. Ko je prvi na udaru? Onaj ko poredi izlaz sa sačuvanim fajlom, red po red. Taj test može proći na vašem laptopu, a pasti na drugoj mašini. Dalje, vodič za migraciju.

### Šta obećava vodič za migraciju?

0:57 Kaže da tačan redosled redova prikazan iznad nije zagarantovan. Dakle, ako se oslanjate na redosled, eksplicitno sortirajte. Prelivanje van jezgra (Out-of-core) je takođe podrazumevano uključeno. Počinje da se preliva na disk na oko osamdeset procenata RAM-a, sa budžetom od šezdeset i četiri gigabajta. Sortiranje, funkcije prozora i mnogi izrazi sada mogu da se preliju. Spajanja i grupisanja dolaze.

### Da li je benčmark fer borba?

1:17 Polars kaže da pobeđuje DataFusion i DuckDB na TPC-H i TPC-DS benčmarcima. Brojke dolaze iz njihovih sopstvenih testiranja, na izvedenim podacima, a njihova fusnota kaže da nisu uporedive sa zvaničnim rezultatima. Njihove sopstvene brojke kažu da Polars postaje oko tri puta brži sa šesnaest jezgara na sto devedeset dva, na TPC-H. Takođe kažu da dodatni niti velike mašine usporavaju male upite.

### Šta vidimo kada ga pokrenemo?

1:41 Dvaput smo pokrenuli isto spajanje na Polars 2.0.0. Podrazumevano izvršavanje meša redove. Sa zastavicom, ulazni redosled se zadržava. Pronađite spajanja koja napajaju test. Bilo koje spajanje bez sortiranja nakon njega je odluka o redosledu redova koju nikada niste doneli. Polars 2.0 je stroži u pogledu tipova.

### Da li strože znači ranije?

1:58 Provera šeme hvata nedostajuću kolonu pre nego što se bilo koji podatak pročita. Ne može da uhvati konverziju koja ne uspeva na jednom redu, jer ta greška čeka podatke. Sada petlja koju sam otvorio.

### Kako da vratim stari redosled?

2:08 Prekidač živi na spajanju. Postavite maintain order na spajanju, ili dodajte sortiranje nakon njega. Vodič predlaže sortiranje. Zastavica za spajanje je zadržala redosled u našem testu, sa redosledom leve strane zadržanim kao levo, desno. Presuda, ispod haube: NEEDS REVIEW.

### Kakva je presuda?

2:22 Pregledao bih svako spajanje pre nadogradnje. Imate pitanje o ovome? Stavite ga u komentare. I to je diff za danas. Ja sam Niko iz Axrisija. Spajajte odgovorno.

## Izvori

- [Release of Polars 2.0](https://pola.rs/posts/release-polars-2/) — Polars (pola.rs)
- [Polars 2.0 upgrade guide](https://docs.pola.rs/releases/upgrade/2/) — Polars documentation
- [Polars homepage](https://pola.rs/) — Polars (pola.rs)
- [polars-2.0-benchmark repository](https://github.com/pola-rs/polars-2.0-benchmark) — Polars on GitHub
- [Release of Polars 2.0 (Hacker News discussion)](https://news.ycombinator.com/item?id=49977177) — Hacker News
