# Polars 2.0: ເປັນຫຍັງການຮ່ວມບໍ່ຮັກສາລຳດັບແຖວອີກຕໍ່ໄປ

Published: 2026-10-08

Polars 2.0 ໃຊ້ collect ໃນເຄື່ອງຈັກສະຕຣີມມິງໂດຍຄ່າເລີ່ມຕົ້ນ. ສໍາລັບ join, group\_by ແລະ unpivot, ລຸ້ນນີ້ບໍ່ຮັບປະກັນລຳດັບແຖວປ້ອນເຂົ້າອີກຕໍ່ໄປ ເວັ້ນເສຍແຕ່ວ່າທ່ານຈະກຳນົດ maintain\_order ຫຼື sort ຢ່າງຊັດເຈນ. ໃນການທົດສອບຂອງພວກເຮົາໃນ polars 2.0.0, ການ join ແບບ inner 2,000,000 ແຖວ ໄດ້ສົ່ງຄືນແຖວອອກຈາກລຳດັບປ້ອນເຂົ້າໂດຍຄ່າເລີ່ມຕົ້ນ ແລະ ຮັກສາລຳດັບໄວ້ດ້ວຍ maintain\_order. ລຸ້ນນີ້ຍັງເປີດການກ່າຍຂໍ້ມູນນອກຫຼັກ (out-of-core spilling) ແລະ ເຮັດໃຫ້ການອ້າງອີງມາດຕະຖານເປັນຂອງຜູ້ຂາຍເອງ.

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

## ສິ່ງທີ່ວິດີໂອນີ້ກວມເອົາ

- ການເອີ້ນ collect() ໃນ lazy query ຕອນນີ້ໃຊ້ເຄື່ອງຈັກສະຕຣີມມິງໂດຍຄ່າເລີ່ມຕົ້ນ, ເຊິ່ງບໍ່ຮັບປະກັນລຳດັບແຖວສຳລັບ join, group\_by ແລະ unpivot.
- ຄູ່ມືການຍົກລະດັບກ່າວວ່າ ລຳດັບບໍ່ແມ່ນລຳດັບກ່ອນ 2.0 ອີກຕໍ່ໄປ ແລະ ບໍ່ຮັບປະກັນ; ມັນແນະນຳໃຫ້ຈັດລຽງຢ່າງຊັດເຈນ ຖ້າທ່ານອີງໃສ່ມັນ.
- ໃນການທົດສອບຂອງພວກເຮົາ, ການ join ແບບ inner ໂດຍຄ່າເລີ່ມຕົ້ນໄດ້ສົ່ງຄືນຄ່າ False; maintain\_order="left\_right" ໃນການ join ໄດ້ສົ່ງຄືນຄ່າ True. ເຄື່ອງດຽວ, ການທົດສອບດຽວ, ຮູບແບບການ join ດຽວ.
- ການກ່າຍຂໍ້ມູນນອກຫຼັກ (Out-of-core spilling) ເປີດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ: ມັນເລີ່ມຕົ້ນທີ່ປະມານ 80% ຂອງ RAM, ດ້ວຍງົບປະມານດິສກ໌ເລີ່ມຕົ້ນ 64 GB. ການ join ແລະ group\_by ແບບ out-of-core ແມ່ນຢູ່ໃນແຜນງານ.
- 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 ໄດ້ຢຸດເຊົາການສັນຍາແບບນັ້ນ, ໂດຍຄ່າເລີ່ມຕົ້ນ, ໂດຍຕັ້ງໃຈ. ໃນວິດີໂອນີ້: ເປັນຫຍັງຄ່າເລີ່ມຕົ້ນຈຶ່ງປ່ຽນແປງ? ມັນຊື້ຫຍັງ? ແລະ script ໃດຂອງເຈົ້າຈະເສຍກ່ອນ? ນີ້ແມ່ນ The Daily Diff, ເບື້ອງຫຼັງ. Polars ແມ່ນຫ້ອງສະໝຸດ DataFrame ແບບ open-source: ເຄື່ອງຈັກຕາຕະລາງທີ່ທ່ານເອີ້ນຈາກ Python,

0:20 ດ້ວຍແກນຫຼັກທີ່ຂຽນດ້ວຍ Rust. ມັນບໍ່ເສຍຄ່າພາຍໃຕ້ໃບອະນຸຍາດ MIT, ແລະທ່ານຕິດຕັ້ງມັນດ້ວຍ pip install polars. ລາຍລະອຽດໜຶ່ງກ່ອນ. ປຸ່ມທີ່ນໍາລຳດັບເກົ່າກັບມາແມ່ນ argument ຂອງການ join ນັ້ນເອງ. ຂ້ອຍຈະກັບມາເວົ້າເຖິງມັນໃນຕອນທ້າຍ. ຕັ້ງແຕ່ 2.0, collect ໃຊ້ເຄື່ອງຈັກສະຕຣີມມິງໂດຍຄ່າເລີ່ມຕົ້ນ. Streaming ແຍກ query ອອກເປັນສ່ວນໆທີ່ເຮັດວຽກພ້ອມກັນ, ແລະສ່ວນຕ່າງໆຈະສຳເລັດເມື່ອພວກມັນສຳເລັດ.

0:42 ສຳລັບ join, group by ແລະ unpivot, ລຸ້ນນີ້ບໍ່ໄດ້ສັນຍາລຳດັບ. ໃຜຈະຖືກກະທົບກ່ອນ? ໃຜກໍຕາມທີ່ປຽບທຽບຜົນໄດ້ຮັບກັບໄຟລ໌ທີ່ບັນທຶກໄວ້, ແຖວຕໍ່ແຖວ. ການທົດສອບນັ້ນສາມາດຜ່ານໃນ laptop ຂອງທ່ານ ແລະ ລົ້ມເຫຼວໃນເຄື່ອງອື່ນ. ຕໍ່ໄປ, ຄູ່ມືການຍົກລະດັບ.

### ຄູ່ມືການຍົກລະດັບສັນຍາຫຍັງ?

0:57 ມັນກ່າວວ່າລຳດັບແຖວທີ່ສະແດງຢູ່ຂ້າງເທິງບໍ່ໄດ້ຮັບປະກັນ. ດັ່ງນັ້ນຖ້າທ່ານອີງໃສ່ລຳດັບ, ຈັດລຽງຢ່າງຊັດເຈນ. Out-of-core ກໍເປີດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນເຊັ່ນກັນ. ມັນເລີ່ມກ່າຍຂໍ້ມູນໄປຫາດິສກ໌ທີ່ປະມານ 80 ສ່ວນຮ້ອຍຂອງ RAM, ດ້ວຍງົບປະມານຫົກສິບສີ່ກິກະໄບ. Sort, window functions ແລະຫຼາຍ expression ສາມາດກ່າຍຂໍ້ມູນໄດ້ຕອນນີ້. Joins ແລະ group-bys ກຳລັງຈະມາ.

### ການທົດສອບເປັນການຕໍ່ສູ້ທີ່ຍຸດຕິທຳບໍ?

1:17 Polars ກ່າວວ່າມັນດີກວ່າ DataFusion ແລະ DuckDB ໃນ TPC-H ແລະ TPC-DS ມາດຕະຖານ. ຕົວເລກມາຈາກການທົດສອບຂອງພວກເຂົາເອງ, ກ່ຽວກັບຂໍ້ມູນທີ່ໄດ້ມາ, ແລະໝາຍເຫດຂອງພວກເຂົາກ່າວວ່າພວກມັນບໍ່ສາມາດປຽບທຽບກັບຜົນທາງການໄດ້. ຕົວເລກຂອງພວກເຂົາເອງກ່າວວ່າ Polars ໄວຂຶ້ນປະມານສາມຈຸດແປດເທົ່າຈາກ ສິບຫົກຄໍໄປຫາໜຶ່ງຮ້ອຍເກົ້າສິບສອງ, ໃນ TPC-H. ພວກເຂົາຍັງກ່າວວ່າ thread ເພີ່ມເຕີມຂອງເຄື່ອງໃຫຍ່ເຮັດໃຫ້ query ນ້ອຍໆຊ້າລົງ.

### ພວກເຮົາເຫັນຫຍັງເມື່ອພວກເຮົາທົດລອງມັນ?

1:41 ພວກເຮົາໄດ້ທົດສອບການ join ເດີມສອງຄັ້ງໃນ Polars 2.0.0. ການທົດສອບໂດຍຄ່າເລີ່ມຕົ້ນເຮັດໃຫ້ແຖວປົນກັນ. ດ້ວຍ flag, ລຳດັບປ້ອນເຂົ້າຈະຍັງຄົງຢູ່. ຊອກຫາການ join ທີ່ນຳໄປສູ່ການທົດສອບ. ການ join ໃດໆທີ່ບໍ່ມີ sort ຫຼັງຈາກນັ້ນແມ່ນການຕັດສິນໃຈລຳດັບແຖວທີ່ທ່ານບໍ່ເຄີຍເຮັດ. Polars 2.0 ເຂັ້ມງວດຂຶ້ນກ່ຽວກັບປະເພດ.

### ເຂັ້ມງວດກວ່າໝາຍເຖິງໄວກວ່າບໍ?

1:58 ການກວດສອບ schema ຈັບຄໍລຳທີ່ຂາດຫາຍໄປກ່ອນທີ່ຈະອ່ານຂໍ້ມູນໃດໆ. ມັນບໍ່ສາມາດຈັບການ cast ທີ່ລົ້ມເຫຼວໃນແຖວດຽວໄດ້, ເພາະວ່າຄວາມຜິດພາດນັ້ນລໍຖ້າ ຂໍ້ມູນ. ຕອນນີ້ loop ທີ່ຂ້ອຍໄດ້ເປີດ.

### ຂ້ອຍຈະເອົາລຳດັບເກົ່າຄືນມາໄດ້ແນວໃດ?

2:08 ປຸ່ມຢູ່ທີ່ການ join. ກຳນົດ maintain order ໃນການ join, ຫຼືເພີ່ມ sort ຫຼັງຈາກນັ້ນ. ຄູ່ມືແນະນຳໃຫ້ໃຊ້ sort. join flag ຮັກສາລຳດັບໄວ້ໃນການທົດສອບຂອງພວກເຮົາ, ໂດຍມີລຳດັບຂອງຝ່າຍຊ້າຍຖືກຮັກສາໄວ້ເປັນ ຊ້າຍ, ຂວາ. ຄໍາຕັດສິນ, ເບື້ອງຫຼັງ: NEEDS REVIEW.

### ຄຳຕັດສິນແມ່ນຫຍັງ?

2:22 ຂ້ອຍຈະທົບທວນການ join ທຸກຄັ້ງກ່ອນການຍົກລະດັບ. ມີຄໍາຖາມກ່ຽວກັບເລື່ອງນີ້ບໍ? ໃສ່ໄວ້ໃນຄໍາເຫັນ. ແລະນັ້ນຄືຄວາມແຕກຕ່າງສໍາລັບມື້ນີ້. ຂ້ອຍຊື່ Niko ຈາກ Axrisi. Merge ຢ່າງມີຄວາມຮັບຜິດຊອບ.

## ແຫຼ່ງຂໍ້ມູນ

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