+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: เหตุใดการ join จึงไม่รักษาลำดับแถวอีกต่อไป

Polars 2.0 รัน collect บน streaming engine เป็นค่าเริ่มต้น สำหรับ join, group_by และ unpivot เวอร์ชันนี้ไม่รับประกันลำดับแถวของอินพุตอีกต่อไป เว้นแต่คุณจะตั้งค่า maintain_order หรือ sort อย่างชัดเจน ในการรันของเราบน polars 2.0.0 การ inner join แถว 2,000,000 แถว ส่งคืนแถวที่ไม่อยู่ในลำดับอินพุตเป็นค่าเริ่มต้น และรักษาลำดับไว้เมื่อตั้งค่า maintain_order นอกจากนี้เวอร์ชันนี้ยังเปิด out-of-core spilling และทำให้การกล่าวอ้างเกณฑ์มาตรฐานเป็นของ vendor เอง

Polars 2.0 รัน collect บน streaming engine เป็นค่าเริ่มต้น สำหรับ join, group_by และ unpivot เวอร์ชันนี้ไม่รับประกันลำดับแถวของอินพุตอีกต่อไป เว้นแต่คุณจะตั้งค่า maintain_order หรือ sort อย่างชัดเจน ในการรันของเราบน polars 2.0.0 การ inner join แถว 2,000,000 แถว ส่งคืนแถวที่ไม่อยู่ในลำดับอินพุตเป็นค่าเริ่มต้น และรักษาลำดับไว้เมื่อตั้งค่า maintain_order นอกจากนี้เวอร์ชันนี้ยังเปิด out-of-core spilling และทำให้การกล่าวอ้างเกณฑ์มาตรฐานเป็นของ vendor เอง

อ่านฉบับลายลักษณ์อักษร (ภาษาอังกฤษ) ↗

วิดีโอนี้ครอบคลุมอะไรบ้าง

  • การเรียก collect() บน lazy query ตอนนี้ใช้ streaming engine เป็นค่าเริ่มต้น ซึ่งไม่รับประกันลำดับแถวสำหรับการ join, group_by และ unpivot
  • คู่มือการย้ายข้อมูลระบุว่าลำดับไม่ใช่ลำดับก่อน 2.0 อีกต่อไปและไม่รับประกัน หากคุณพึ่งพาลำดับนั้น ควรจัดเรียงอย่างชัดเจน
  • ในการรันของเรา การ inner join เริ่มต้นส่งคืน input order เป็น False; maintain_order="left_right" ในการ join ส่งคืน True เครื่องเดียว, รันเดียว, รูปแบบการ join เดียว
  • Out-of-core spilling เปิดใช้งานโดยค่าเริ่มต้น: เริ่มที่ประมาณ 80% ของ RAM โดยมีงบประมาณดิสก์เริ่มต้น 64 GB Out-of-core join และ group_by อยู่ในแผนงาน
  • collect_schema() ตรวจจับคอลัมน์ที่หายไปก่อนที่จะมีการอ่านข้อมูลใดๆ แต่การ cast ที่ล้มเหลวบนค่าเดียวจะล้มเหลวที่ collect() เท่านั้น
  • การเปรียบเทียบ TPC-H และ TPC-DS เป็นการรันของ vendor เองบนข้อมูลที่ได้มา และเชิงอรรถระบุว่าผลลัพธ์ไม่สามารถเปรียบเทียบกับเกณฑ์มาตรฐานอย่างเป็นทางการได้

บทถอดเสียงที่แปลแล้ว

แปลจากการบรรยายภาษาอังกฤษต้นฉบับ เสียงและคำบรรยายที่มีให้จะควบคุมโดย YouTube

ทำไมลำดับเริ่มต้นถึงเปลี่ยนไป?

0:00 คุณคิดว่าการ join จะส่งคืนแถวของคุณตามลำดับที่คุณเขียน Polars 2.0 หยุดสัญญาว่าจะทำอย่างนั้นเป็นค่าเริ่มต้นโดยเจตนา ในวิดีโอนี้: ทำไมค่าเริ่มต้นถึงเปลี่ยนไป? มันได้อะไรมาบ้าง? และสคริปต์ไหนของคุณจะพังก่อน? นี่คือ The Daily Diff, ภายใต้ฝาครอบ Polars เป็นไลบรารี DataFrame แบบโอเพนซอร์ส: engine ตารางที่คุณเรียกใช้จาก Python,

0:20 โดยมีแกนหลักเขียนด้วย Rust มันฟรีภายใต้ใบอนุญาต MIT และคุณติดตั้งได้ด้วย pip install polars รายละเอียดหนึ่งก่อน สวิตช์ที่ทำให้ลำดับเก่ากลับมาคืออาร์กิวเมนต์ของการ join เอง ฉันจะกลับมาพูดถึงมันในตอนท้าย ตั้งแต่ 2.0 เป็นต้นไป collect จะรัน streaming engine โดยค่าเริ่มต้น Streaming จะแบ่ง query ออกเป็นส่วนๆ ที่รันแบบขนาน, และส่วนต่างๆ จะเสร็จสิ้นเมื่อเสร็จ

0:42 สำหรับ join, group by และ unpivot เวอร์ชันนี้ไม่รับประกันลำดับ ใครจะได้รับผลกระทบก่อน? ใครก็ตามที่เปรียบเทียบเอาต์พุตกับไฟล์ที่บันทึกไว้ แถวต่อแถว การทดสอบนั้นอาจผ่านบนแล็ปท็อปของคุณและล้มเหลวบนเครื่องอื่น ถัดไป คู่มือการย้ายข้อมูล

คู่มือการย้ายข้อมูลสัญญาอะไร?

0:57 ระบุว่าลำดับแถวที่แสดงด้านบนไม่รับประกัน ดังนั้นหากคุณพึ่งพาลำดับนั้น ให้จัดเรียงอย่างชัดเจน Out-of-core ก็เปิดใช้งานโดยค่าเริ่มต้นเช่นกัน มันเริ่มเขียนข้อมูลลงดิสก์ที่ประมาณ 80 เปอร์เซ็นต์ของ RAM, โดยมีงบประมาณ 64 กิกะไบต์ Sort, window functions และหลาย expression สามารถเขียนข้อมูลลงดิสก์ได้แล้ว Joins และ group-bys กำลังจะมา

เกณฑ์มาตรฐานนี้เป็นการแข่งขันที่ยุติธรรมหรือไม่?

1:17 Polars กล่าวว่ามันเอาชนะ DataFusion และ DuckDB ใน TPC-H และ TPC-DS เกณฑ์มาตรฐาน ตัวเลขมาจากผลการรันของพวกเขาเอง บนข้อมูลที่ได้มา, และเชิงอรรถระบุว่าไม่สามารถเปรียบเทียบกับผลลัพธ์อย่างเป็นทางการได้ ตัวเลขของพวกเขาเองระบุว่า Polars เร็วขึ้นประมาณ 3.8 เท่าจาก 16 คอร์เป็น 192 คอร์ บน TPC-H พวกเขายังกล่าวอีกว่าเธรดพิเศษของเครื่องขนาดใหญ่ทำให้ query ขนาดเล็กช้าลง

เราเห็นอะไรเมื่อเราเรียกใช้?

1:41 เราได้รันการ join เดียวกันสองครั้งบน Polars 2.0.0 การรันเริ่มต้นจะสลับแถว ด้วย flag ลำดับอินพุตจะยังคงอยู่ ค้นหาการ join ที่ป้อนข้อมูลให้กับการทดสอบ การ join ใดๆ ที่ไม่มีการจัดเรียงตามหลังคือการตัดสินใจเกี่ยวกับลำดับแถวที่คุณไม่เคยทำ Polars 2.0 เข้มงวดกับประเภทข้อมูลมากขึ้น

เข้มงวดกว่าหมายถึงเร็วกว่าหรือไม่?

1:58 การตรวจสอบ schema จะตรวจจับคอลัมน์ที่หายไปก่อนที่จะมีการอ่านข้อมูลใดๆ มันไม่สามารถตรวจจับการ cast ที่ล้มเหลวบนแถวเดียวได้ เพราะข้อผิดพลาดนั้นต้องรอ ข้อมูล ตอนนี้วงจรที่ฉันเปิดไว้

ฉันจะเรียกคืนลำดับเก่าได้อย่างไร?

2:08 สวิตช์อยู่ในการ join ตั้งค่า maintain order ในการ join หรือเพิ่ม sort หลังจากนั้น คู่มือแนะนำให้ใช้ sort แฟล็กการ join รักษาลำดับในการรันของเรา โดยที่ลำดับด้านซ้ายถูกเก็บไว้เป็น ซ้าย, ขวา คำตัดสิน, ภายใต้ฝาครอบ: NEEDS REVIEW

คำตัดสินคืออะไร?

2:22 ฉันจะตรวจสอบทุกการ join ก่อนอัปเกรด มีคำถามเกี่ยวกับเรื่องนี้หรือไม่? ใส่ไว้ในความคิดเห็น และนั่นคือ diff สำหรับวันนี้ ฉันคือนิโก้จาก Axrisi Merge อย่างรับผิดชอบ

แหล่งที่มา

  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

วิดีโอที่เกี่ยวข้อง

daily · th · 7 ต.ค. 2569

Hono จำกัดการดึงคำขอภายนอกเนื่องจากผู้ดูแลพิจารณาการรับเข้าส่วนร่วมใหม่

Hono ปิดใช้งานการสร้างคำขอดึงข้อมูลภายนอกในขณะที่ยังคงรักษารหัส MIT-licensed ไว้ Sindre Sorhus แยกจากกันกล่าวว่าการจำกัดที่เก็บของเขาเองนั้นเกิดจาก AI และกล่าวว่าการบำรุงรักษาและการจัดการปัญหาจะยังคงด

5:22 ↗
daily · th · 7 ต.ค. 2569

Google นำ JPEG XL กลับมาที่ Chrome

Google ประกาศถอดรหัส JPEG XL เริ่มต้นด้วย Chrome 155 หลังจากการทดลองก่อนหน้านี้ถูกนำออกไป ฉบับวันที่ 7 ตุลาคมนี้จะตรวจสอบความคิดเห็นของนักพัฒนา, ตัวถอดรหัส Rust ใหม่, การอ้างสิทธิ์การบีบอัดที่แข่งขันก

5:17 ↗
daily · th · 1 ต.ค. 2569

Gemini 4 Argon คือโมเดลที่ดีที่สุดของ Google แต่คุณยังใช้ไม่ได้

Google ได้ประกาศ Gemini 4 Argon ซึ่งเป็นโมเดลบุกเบิกใหม่ และมีเพียงผู้ป้องกันภัยไซเบอร์ที่ได้รับความไว้วางใจเท่านั้นที่สามารถใช้งานได้ นี่คือสิ่งที่ตารางเกณฑ์มาตรฐาน 19 แถวของ Google แสดงให้เห็น สิ่งท

4:53 ↗
under-the-hood · th · 24 ก.ย. 2569

SAML, เจาะลึก: ลายเซ็นต์ภายในจดหมาย

SAML ทำให้คุณสามารถเข้าสู่ระบบแอปทำงานเกือบทุกแอป และลายเซ็นต์ของมันอาศัยอยู่ภายใน XML ที่มันลงนาม เจาะลึก: การเต้นรำของการเข้าสู่ระบบระหว่างแอป, เบราว์เซอร์ และผู้ให้บริการระบุตัวตน, ลักษณะของ Assert

3:02 ↗