# Polars 2.0: proč spojení již nezachovávají pořadí řádků

Published: 2026-10-08

Polars 2.0 spouští collect na streamovacím enginu ve výchozím nastavení. U operací join, group\_by a unpivot již tato verze negarantuje pořadí vstupních řádků, pokud explicitně nenastavíte maintain\_order nebo sort. V našem testu na Polars 2.0.0 vrátila vnitřní join s 2 000 000 řádky ve výchozím nastavení řádky mimo vstupní pořadí a pořadí zachovala s nastavením maintain\_order. Tato verze také zapíná přelévání mimo jádro (out-of-core spilling) a benchmarkové tvrzení si dodavatel přisvojuje.

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

## Co toto video pokrývá

- Volání collect() na líném dotazu nyní ve výchozím nastavení používá streamovací engine, který negarantuje pořadí řádků pro join, group\_by a unpivot.
- Migrační průvodce uvádí, že pořadí již není před 2.0 pořadím a není zaručeno; doporučuje explicitní řazení, pokud na něm závisíte.
- V našem testu výchozí vnitřní spojení vrátilo vstupní pořadí False; maintain\_order="left\_right" u spojení vrátilo True. Jeden stroj, jeden běh, jeden tvar spojení.
- Přelévání mimo jádro (out-of-core spilling) je ve výchozím nastavení zapnuto: začíná přibližně na 80 % RAM, s výchozím rozpočtem 64 GB disku. Out-of-core join a group\_by jsou na plánu.
- collect\_schema() zachytí chybějící sloupec dříve, než jsou načtena jakákoli data, ale přetypování, které selže pouze u jedné hodnoty, selže až při collect().
- Porovnání TPC-H a TPC-DS je vlastní provedení dodavatele na odvozených datech a jeho poznámka pod čarou uvádí, že výsledky nejsou srovnatelné s oficiálními benchmarky.

## Kapitoly

- 0:00 Proč se změnilo výchozí pořadí?
- 0:56 Co slibuje migrační průvodce?
- 1:17 Je benchmark férový boj?
- 1:41 Co vidíme, když ho spustíme?
- 1:56 Znamená přísnější dříve?
- 2:07 Jak získám zpět staré pořadí?
- 2:20 Jaký je verdikt?

## Přeložený přepis

Přeloženo z původního anglického vyprávění. Dostupné audio a titulky jsou řízeny YouTube.

### Proč se změnilo výchozí pořadí?

0:00 Myslíte si, že spojení vám vrátí řádky v pořadí, ve kterém jste je napsali. Polars 2.0 přestal toto ve výchozím nastavení slibovat, záměrně. V tomto videu: proč se změnilo výchozí nastavení? Co to přineslo? A který z vašich skriptů se rozbije jako první? Toto je The Daily Diff, pod kapotou. Polars je open-source knihovna DataFrame: tabulkový engine, který voláte z Pythonu,

0:20 s jádrem napsaným v Rustu. Je zdarma pod licencí MIT a instaluje se pomocí pip install polars. Nejdříve jeden detail. Přepínač, který vrací staré pořadí, je argumentem samotného spojení. Vrátím se k němu na konci. Od verze 2.0 spouští collect ve výchozím nastavení streamovací engine. Streaming rozděluje dotaz na bloky, které běží paralelně, a bloky se dokončí, když se dokončí.

0:42 Pro join, group by a unpivot, tato verze neslibuje žádné pořadí. Kdo bude zasažen jako první? Každý, kdo porovnává výstup s uloženým souborem, řádek po řádku. Tento test může projít na vašem notebooku a selhat na jiném stroji. Dále, migrační průvodce.

### Co slibuje migrační průvodce?

0:57 Uvádí, že přesné pořadí řádků zobrazené výše není zaručeno. Takže pokud se spoléháte na pořadí, explicitně seřadíte. Out-of-core je také ve výchozím nastavení zapnuto. Začíná se přelévat na disk přibližně při osmdesáti procentech RAM, s rozpočtem šedesáti čtyř gigabajtů. Sort, okenní funkce a mnoho výrazů se nyní mohou přelévat. Spojení a group-by přijdou.

### Je benchmark férový boj?

1:17 Polars říká, že poráží DataFusion a DuckDB v TPC-H a TPC-DS benchmarcích. Čísla pocházejí z jejich vlastních testů, na odvozených datech, a jejich poznámka pod čarou uvádí, že nejsou srovnatelné s oficiálními výsledky. Jejich vlastní čísla říkají, že Polars zrychlí přibližně 3,8krát z šestnácti jader na sto devadesát dva, na TPC-H. Také říkají, že extra vlákna velkého stroje zpomalují malé dotazy.

### Co vidíme, když ho spustíme?

1:41 Dvakrát jsme spustili stejné spojení na Polars 2.0.0. Výchozí spuštění zamíchá řádky. S příznakem zůstane vstupní pořadí zachováno. Najděte spojení, která napájejí test. Jakékoli spojení bez řazení po něm je rozhodnutí o pořadí řádků, které jste nikdy neučinili. Polars 2.0 je přísnější na typy.

### Znamená přísnější dříve?

1:58 Kontrola schématu zachytí chybějící sloupec dříve, než jsou načtena jakákoli data. Nemůže zachytit přetypování, které selže na jednom řádku, protože tato chyba čeká na data. Nyní smyčka, kterou jsem otevřel.

### Jak získám zpět staré pořadí?

2:08 Přepínač žije na spojení. Nastavte maintain order na spojení, nebo přidejte řazení po něm. Průvodce navrhuje řazení. Příznak spojení zachoval pořadí v našem testu, s pořadím levé strany zachovaným jako levá, pravá. Verdikt, pod kapotou: NEEDS REVIEW.

### Jaký je verdikt?

2:22 Před upgradem bych zkontroloval každé spojení. Máte k tomu otázku? Napište ji do komentářů. A to je dnešní diff. Jsem Niko z Axrisi. Slučujte zodpovědně.

## Zdroje

- [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
