# Polars 2.0: מדוע צירופים (joins) אינם שומרים עוד על סדר השורות שלהם

Published: 2026-10-08

Polars 2.0 מריץ כברירת מחדל את collect על מנוע סטרימינג. עבור join, group\_by ו-unpivot, הגרסה אינה מבטיחה עוד את סדר שורות הקלט אלא אם תגדיר maintain\_order או sort באופן מפורש. בהרצה שלנו על polars 2.0.0, join פנימי של 2,000,000 שורות החזיר שורות מחוץ לסדר הקלט כברירת מחדל ושמר על הסדר עם maintain\_order מוגדר. הגרסה גם מפעילה out-of-core spilling והופכת את טענות הבנצ'מרק של הספק לשלו.

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

## מה מכסה הסרטון הזה

- קריאה ל-collect() על שאילתת lazy משתמשת כעת במנוע הסטרימינג כברירת מחדל, אשר אינו מבטיח סדר שורות עבור join, group\_by ו-unpivot.
- מדריך המעבר אומר שהסדר אינו עוד הסדר שלפני 2.0 ואינו מובטח; הוא ממליץ על מיון מפורש אם אתה מסתמך עליו.
- בהרצה שלנו, join פנימי כברירת מחדל החזיר סדר קלט False; maintain\_order="left\_right" על ה-join החזיר True. מכונה אחת, הרצה אחת, צורת join אחת.
- שפיכת Out-of-core מופעלת כברירת מחדל: היא מתחילה בכ-80% מה-RAM, עם תקציב דיסק ברירת מחדל של 64 GB. join ו-group\_by מחוץ לליבה נמצאים במפת הדרכים.
- collect\_schema() תופס עמודה חסרה לפני קריאת נתונים כלשהם, אך cast שנכשל על ערך אחד בלבד נכשל רק ב-collect().
- השוואת TPC-H ו-TPC-DS היא הרצה של הספק עצמו על נתונים נגזרים, והערת השוליים שלו אומרת שהתוצאות אינן ניתנות להשוואה לבנצ'מרקים רשמיים.

## פרקים

- 0:00 מדוע סדר ברירת המחדל השתנה?
- 0:56 מה מבטיח מדריך המעבר?
- 1:17 האם הבנצ'מרק קרב הוגן?
- 1:41 מה אנו רואים כשאנו מריצים אותו?
- 1:56 האם מחמיר פירושו מוקדם יותר?
- 2:07 איך אני מחזיר את הסדר הישן?
- 2:20 מהי פסק הדין?

## תמליל מתורגם

תורגם מהקריינות המקורית באנגלית. זמינות אודיו וכתוביות נשלטת על ידי YouTube.

### מדוע סדר ברירת המחדל השתנה?

0:00 אתה חושב ש-join מחזיר לך שורות בסדר שבו כתבת אותן. Polars 2.0 הפסיק להבטיח זאת, כברירת מחדל, בכוונה. בסרטון זה: מדוע השתנה ברירת המחדל? מה זה קנה? ואיזה מהסקריפטים שלך נשבר ראשון? זהו The Daily Diff, מתחת למכסה המנוע. Polars היא ספריית DataFrame בקוד פתוח: מנוע טבלאות שאתה קורא לו מ-Python,

0:20 עם הליבה שלו כתובה ב-Rust. הוא חופשי תחת רישיון MIT, ואתה מתקין אותו עם pip install polars. פרט אחד קודם. המתג שמחזיר את הסדר הישן הוא ארגומנט ל-join עצמו. אחזור אליו בסוף. מאז 2.0, collect מריץ את מנוע הסטרימינג כברירת מחדל. סטרימינג מחלק את השאילתה לנתחים הרצים במקביל, והנתחים מסיימים כשהם מסיימים.

0:42 עבור join, group by ו-unpivot, הגרסה אינה מבטיחה סדר. מי נפגע ראשון? כל מי שמשווה פלט לקובץ שמור, שורה אחר שורה. בדיקה זו יכולה לעבור במחשב הנייד שלך ולהיכשל במכונה אחרת. הבא, מדריך המעבר.

### מה מבטיח מדריך המעבר?

0:57 הוא אומר שסדר השורות המדויק המוצג לעיל אינו מובטח. אז אם אתה מסתמך על הסדר, מיין במפורש. Out-of-core מופעל כברירת מחדל גם כן. הוא מתחיל לשפוך לדיסק בכשמונים אחוזים מה-RAM, עם תקציב של שישים וארבעה גיגה-בייט. Sort, פונקציות חלון וביטויים רבים יכולים כעת לשפוך. Joins ו-group-bys בדרך.

### האם הבנצ'מרק קרב הוגן?

1:17 Polars אומרת שהיא מנצחת את DataFusion ו-DuckDB בבנצ'מרקים של TPC-H ו-TPC-DS. המספרים מגיעים מההרצות שלהם, על נתונים נגזרים, והערת השוליים שלהם אומרת שהם אינם ניתנים להשוואה לתוצאות רשמיות. המספרים שלהם אומרים ש-Polars משיגה פי שלושה נקודה שמונה בערך מהירות מ- שישה עשר ליבות למאה תשעים ושתיים, ב-TPC-H. הם גם אומרים שהת'רדים הנוספים של המכונה הגדולה מאטים שאילתות קטנות.

### מה אנו רואים כשאנו מריצים אותו?

1:41 הרצנו את אותו join פעמיים על Polars 2.0.0. ההרצה כברירת מחדל מערבבת את השורות. עם הדגל, סדר הקלט נשמר. מצא את ה-joins שמזינים בדיקה. כל join ללא sort אחריו הוא החלטה על סדר שורות שמעולם לא קיבלת. Polars 2.0 מחמיר יותר לגבי סוגים.

### האם מחמיר פירושו מוקדם יותר?

1:58 בדיקת הסכימה תופסת עמודה חסרה לפני שנקראים נתונים כלשהם. היא אינה יכולה לתפוס cast שנכשל על שורה אחת, מכיוון ששגיאה זו ממתינה ל- נתונים. עכשיו הלולאה שפתחתי.

### איך אני מחזיר את הסדר הישן?

2:08 המתג נמצא על ה-join. הגדר maintain order על ה-join, או הוסף sort אחריו. המדריך מציע את ה-sort. הדגל של ה-join שמר על הסדר בהרצה שלנו, כאשר סדר הצד השמאלי נשמר כ- שמאל, ימין. פסק דין, מתחת למכסה המנוע: NEEDS REVIEW.

### מהי פסק הדין?

2:22 הייתי בודק כל join לפני שדרוג. יש לך שאלה בנוגע לזה? שים אותה בתגובות. וזה ה-diff להיום. אני ניקו מ-Axrisi. מזג באחריות.

## מקורות

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