# Polars 2.0: Warum Joins ihre Zeilenreihenfolge nicht mehr beibehalten

Published: 2026-10-08

Polars 2.0 führt standardmäßig \`collect\` auf einer Streaming-Engine aus. Bei \`join\`, \`group\_by\` und \`unpivot\` garantiert die Version die Reihenfolge der Eingabezeilen nicht mehr, es sei denn, Sie setzen \`maintain\_order\` oder \`sort\` explizit. Bei unserem Lauf auf Polars 2.0.0 lieferte ein 2.000.000 Zeilen umfassender Inner Join standardmäßig Zeilen außerhalb der Eingabereihenfolge zurück und behielt die Reihenfolge bei, wenn \`maintain\_order\` gesetzt war. Die Version aktiviert auch das Auslagern außerhalb des Kernspeichers (\`out-of-core spilling\`) und macht die Benchmark-Angaben des Anbieters zu seinen eigenen.

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

## Was dieses Video behandelt

- Der Aufruf von \`collect()\` bei einer lazy-Abfrage verwendet nun standardmäßig die Streaming-Engine, die für \`join\`, \`group\_by\` und \`unpivot\` keine Zeilenreihenfolge garantiert.
- Der Migrationsleitfaden besagt, dass die Reihenfolge nicht mehr der Vor-2.0-Reihenfolge entspricht und nicht garantiert wird; er empfiehlt eine explizite Sortierung, wenn man sich darauf verlässt.
- Bei unserem Lauf lieferte ein standardmäßiger Inner Join \`input order False\`; \`maintain\_order="left\_right"\` beim Join lieferte \`True\`. Eine Maschine, ein Lauf, eine Join-Form.
- Das Auslagern außerhalb des Kernspeichers (\`Out-of-core spilling\`) ist standardmäßig aktiviert: Es beginnt bei etwa 80 % des RAMs, mit einem Standard-Disk-Budget von 64 GB. Out-of-core \`join\` und \`group\_by\` stehen auf der Roadmap.
- \`collect\_schema()\` fängt eine fehlende Spalte ab, bevor Daten gelesen werden, aber ein Cast, der nur bei einem Wert fehlschlägt, schlägt erst bei \`collect()\` fehl.
- Der TPC-H- und TPC-DS-Vergleich ist der eigene Lauf des Anbieters auf abgeleiteten Daten, und die Fußnote besagt, dass die Ergebnisse nicht mit offiziellen Benchmarks vergleichbar sind.

## Kapitel

- 0:00 Warum hat sich die Standardreihenfolge geändert?
- 0:56 Was verspricht der Migrationsleitfaden?
- 1:17 Ist der Benchmark ein fairer Kampf?
- 1:41 Was sehen wir, wenn wir ihn ausführen?
- 1:56 Bedeutet strenger früher?
- 2:07 Wie bekomme ich die alte Reihenfolge zurück?
- 2:20 Was ist das Fazit?

## Übersetztes Transkript

Aus der englischen Originalerzählung übersetzt. Verfügbare Audio- und Untertitel werden von YouTube gesteuert.

### Warum hat sich die Standardreihenfolge geändert?

0:00 Sie denken, ein Join gibt Ihnen Ihre Zeilen in der Reihenfolge zurück, in der Sie sie geschrieben haben. Polars 2.0 hat absichtlich aufgehört, dies standardmäßig zu versprechen. In diesem Video: Warum hat sich der Standard geändert? Was hat es gebracht? Und welches Ihrer Skripte bricht zuerst? Das ist The Daily Diff, unter der Haube. Polars ist eine Open-Source-DataFrame-Bibliothek: Eine Tabellen-Engine, die Sie aus Python aufrufen,

0:20 mit einem in Rust geschriebenen Kern. Es ist kostenlos unter der MIT-Lizenz und Sie installieren es mit \`pip install polars\`. Ein Detail vorab. Der Schalter, der die alte Reihenfolge zurückbringt, ist ein Argument für den Join selbst. Ich komme am Ende darauf zurück. Seit 2.0 führt \`collect\` standardmäßig die Streaming-Engine aus. Streaming teilt die Abfrage in parallel laufende Chunks auf, und die Chunks werden fertig, wenn sie fertig sind.

0:42 Für \`join\`, \`group by\` und \`unpivot\` verspricht die Version keine Reihenfolge. Wer wird zuerst getroffen? Wer auch immer die Ausgabe Zeile für Zeile mit einer gespeicherten Datei vergleicht. Dieser Test kann auf Ihrem Laptop bestehen und auf einer anderen Maschine fehlschlagen. Als Nächstes der Migrationsleitfaden.

### Was verspricht der Migrationsleitfaden?

0:57 Er besagt, dass die oben gezeigte genaue Zeilenreihenfolge nicht garantiert wird. Wenn Sie sich also auf die Reihenfolge verlassen, sortieren Sie explizit. Out-of-core ist auch standardmäßig aktiviert. Es beginnt mit dem Auslagern auf die Festplatte bei etwa achtzig Prozent des RAMs, mit einem Budget von vierundsechzig Gigabyte. Sortierung, Fensterfunktionen und viele Ausdrücke können jetzt ausgelagert werden. Joins und Group-bys kommen noch.

### Ist der Benchmark ein fairer Kampf?

1:17 Polars sagt, es schlägt DataFusion und DuckDB bei den TPC-H und TPC-DS Benchmarks. Die Zahlen stammen aus ihren eigenen Läufen, auf abgeleiteten Daten, und ihre Fußnote besagt, dass sie nicht mit offiziellen Ergebnissen vergleichbar sind. Ihre eigenen Zahlen besagen, dass Polars bei TPC-H etwa dreieinhalbmal schneller wird von sechzehn Kernen auf einhundertzweiundneunzig. Sie sagen auch, dass die zusätzlichen Threads der großen Maschine kleine Abfragen verlangsamen.

### Was sehen wir, wenn wir ihn ausführen?

1:41 Wir haben denselben Join zweimal auf Polars 2.0.0 ausgeführt. Der Standardlauf mischt die Zeilen. Mit dem Flag bleibt die Eingabereihenfolge erhalten. Suchen Sie die Joins, die einen Test speisen. Jeder Join ohne eine anschließende Sortierung ist eine Zeilenreihenfolge-Entscheidung, die Sie nie getroffen haben. Polars 2.0 ist strenger bei den Typen.

### Bedeutet strenger früher?

1:58 Die Schemaüberprüfung fängt eine fehlende Spalte ab, bevor Daten gelesen werden. Sie kann keinen Cast abfangen, der bei einer Zeile fehlschlägt, da dieser Fehler auf die Daten wartet. Nun die Schleife, die ich geöffnet habe.

### Wie bekomme ich die alte Reihenfolge zurück?

2:08 Der Schalter befindet sich am Join. Setzen Sie \`maintain\_order\` auf den Join oder fügen Sie eine Sortierung danach hinzu. Der Leitfaden schlägt die Sortierung vor. Das Join-Flag behielt die Reihenfolge in unserem Lauf bei, wobei die Reihenfolge der linken Seite als links, rechts beibehalten wurde. Fazit, unter der Haube: NEEDS REVIEW.

### Was ist das Fazit?

2:22 Ich würde jeden Join vor dem Upgrade überprüfen. Haben Sie eine Frage dazu? Stellen Sie sie in die Kommentare. Und das ist der Diff für heute. Ich bin Niko von Axrisi. Verantwortungsbewusst zusammenführen.

## Quellen

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