Polars 2.0: ինչու join-ներն այլևս չեն պահպանում տողերի հերթականությունը
Polars 2.0-ը լռելյայն գործարկում է collect-ը streaming engine-ի վրա: Join-ի, group_by-ի և unpivot-ի համար թողարկումն այլևս չի երաշխավորում մուտքային տողերի հերթականությունը, եթե հստակորեն չեք սահմանել maintain_order կամ sort: Polars 2.0.0-ի վրա մեր գործարկման ժամանակ 2,000,000 տող ունեցող ներքին join-ը լռելյայն վերադարձրել է տողերը մուտքային հերթականությունից դուրս և պահպանել է հերթականությունը maintain_order-ի սահմանմամբ: Թողարկումը նաև միացնում է out-of-core spilling-ը և չափորոշիչի պահանջները դարձնում է վաճառողի սեփականը:
Polars 2.0-ը լռելյայն գործարկում է collect-ը streaming engine-ի վրա: Join-ի, group_by-ի և unpivot-ի համար թողարկումն այլևս չի երաշխավորում մուտքային տողերի հերթականությունը, եթե հստակորեն չեք սահմանել maintain_order կամ sort: Polars 2.0.0-ի վրա մեր գործարկման ժամանակ 2,000,000 տող ունեցող ներքին join-ը լռելյայն վերադարձրել է տողերը մուտքային հերթականությունից դուրս և պահպանել է հերթականությունը maintain_order-ի սահմանմամբ: Թողարկումը նաև միացնում է out-of-core spilling-ը և չափորոշիչի պահանջները դարձնում է վաճառողի սեփականը:
Կարդացեք գրավոր տարբերակը (անգլերեն) ↗
Ինչ է ընդգրկում այս տեսանյութը
- Ծուլ լրացման վրա collect() կանչելն այժմ լռելյայն օգտագործում է streaming engine-ը, որը չի երաշխավորում տողերի հերթականությունը join-ի, group_by-ի և unpivot-ի համար:
- Միգրացիայի ուղեցույցը նշում է, որ հերթականությունն այլևս նախա-2.0 հերթականությունը չէ և երաշխավորված չէ. այն խորհուրդ է տալիս հստակ տեսակավորում, եթե դրան ապավինում եք:
- Մեր գործարկման ժամանակ լռելյայն ներքին join-ը վերադարձրել է մուտքային հերթականություն False; maintain_order="left_right"-ը join-ի վրա վերադարձրել է True: Մեկ մեքենա, մեկ գործարկում, մեկ join ձև:
- Out-of-core spilling-ը միացված է լռելյայն. այն սկսվում է RAM-ի մոտ 80%-ից, 64 ԳԲ լռելյայն սկավառակի բյուջեով: Out-of-core join-ը և group_by-ը ճանապարհային քարտեզի վրա են:
- collect_schema()-ն բռնում է բացակայող սյունակը մինչև որևէ տվյալ կարդալը, սակայն միայն մեկ արժեքի վրա ձախողվող cast-ը ձախողվում է միայն collect()-ի ժամանակ:
- TPC-H և TPC-DS համեմատությունը վաճառողի սեփական գործարկումն է ածանցյալ տվյալների վրա, և դրա ծանոթագրությունը նշում է, որ արդյունքները համեմատելի չեն պաշտոնական չափորոշիչների հետ:
Թարգմանված արձանագրություն
Թարգմանվել է բնօրինակ անգլերեն պատմությունից։ Հասանելի աուդիո և ենթագրերը վերահսկվում են YouTube-ի կողմից։
Ինչու՞ փոխվեց լռելյայն հերթականությունը:
0:00 Կարծում եք՝ միացումը ձեր տողերը վերադարձնում է այն հերթականությամբ, որով դուք գրել եք դրանք: Polars 2.0-ը դադարեց դա խոստանալ՝ լռելյայն, միտումնավոր: Այս տեսանյութում՝ ինչու՞ փոխվեց լռելյայնը: Ի՞նչ ձեռք բերեց: Եվ ձեր սցենարներից ո՞րը կկոտրվի առաջինը: Սա The Daily Diff-ն է, ներքին կողմը: Polars-ը բաց կոդով DataFrame գրադարան է. աղյուսակային շարժիչ, որը կանչում եք Python-ից,
0:20 որի հիմքը գրված է Rust-ով: Այն անվճար է MIT լիցենզիայի ներքո, և այն տեղադրում եք pip install polars-ով: Մի մանրուք նախ: Անջատիչը, որը վերադարձնում է հին հերթականությունը, հենց join-ի արգումենտ է: Դրան կանդրադառնամ վերջում: 2.0-ից ի վեր, collect-ը լռելյայն գործարկում է streaming engine-ը: Streaming-ը բաժանում է հարցումը մասերի, որոնք աշխատում են զուգահեռ, և մասերը ավարտվում են, երբ ավարտվում են:
0:42 Join-ի, group by-ի և unpivot-ի համար թողարկումը հերթականություն չի խոստանում: Ո՞վ կտուժի առաջինը: Ով համեմատում է ելքը պահված ֆայլի հետ, տող առ տող: Այդ թեստը կարող է անցնել ձեր նոութբուքի վրա և ձախողվել այլ մեքենայի վրա: Հաջորդը՝ միգրացիայի ուղեցույցը:
Ի՞նչ է խոստանում միգրացիայի ուղեցույցը:
0:57 Այն ասում է, որ վերևում ցուցադրված տողերի ճշգրիտ հերթականությունը երաշխավորված չէ: Այսպիսով, եթե ապավինում եք հերթականությանը, հստակ տեսակավորեք: Out-of-core-ը նույնպես լռելյայն միացված է: Այն սկսում է տեղեկատվությունը սկավառակին փոխանցել RAM-ի մոտ ութսուն տոկոսի դեպքում, վաթսունչորս գիգաբայթ բյուջեով: Տեսակավորումը, պատուհանային ֆունկցիաները և շատ արտահայտություններ այժմ կարող են տեղեկատվությունը սկավառակին փոխանցել: Joins-երը և group-by-ները գալիս են:
Արդյո՞ք չափորոշիչը արդար պայքար է:
1:17 Polars-ը նշում է, որ այն գերազանցում է DataFusion-ին և DuckDB-ին TPC-H և TPC-DS չափորոշիչներում: Թվերը ստացվել են իրենց սեփական գործարկումներից՝ ածանցյալ տվյալների վրա, և դրանց ծանոթագրությունը նշում է, որ դրանք համեմատելի չեն պաշտոնական արդյունքների հետ: Իրենց սեփական թվերով Polars-ը դառնում է մոտ երեք ամբողջ ութ անգամ ավելի արագ՝ տասնվեց միջուկից մինչև հարյուր իննսունչորս, TPC-H-ի վրա: Նրանք նաև նշում են, որ մեծ մեքենայի լրացուցիչ թելերը դանդաղեցնում են փոքր հարցումները:
Ի՞նչ ենք տեսնում, երբ գործարկում ենք այն:
1:41 Մենք գործարկեցինք նույն join-ը երկու անգամ Polars 2.0.0-ի վրա: Լռելյայն գործարկումը խառնում է տողերը: Դրոշակով մուտքային հերթականությունը պահպանվում է: Գտեք այն join-երը, որոնք սնուցում են թեստը: Ցանկացած join առանց դրանից հետո տեսակավորման, տողերի հերթականության որոշում է, որը դուք երբեք չեք կայացրել: Polars 2.0-ն ավելի խիստ է տիպերի նկատմամբ:
Արդյո՞ք ավելի խիստը նշանակում է ավելի վաղ:
1:58 Սխեմայի ստուգումը բռնում է բացակայող սյունակը նախքան որևէ տվյալ կարդալը: Այն չի կարող բռնել այն cast-ը, որը ձախողվում է մեկ տողի վրա, քանի որ այդ սխալը սպասում է տվյալներին: Այժմ այն ցիկլը, որը ես բացեցի:
Ինչպե՞ս վերադարձնել հին հերթականությունը:
2:08 Անջատիչը գտնվում է join-ի վրա: Սահմանեք maintain order join-ի վրա, կամ դրանից հետո ավելացրեք sort: Ուղեցույցը հուշում է sort-ը: Join դրոշակը պահպանեց հերթականությունը մեր գործարկման ժամանակ, ձախ կողմի հերթականությունը պահպանվեց որպես ձախ, աջ: Վճիռը, ներքին կողմը՝ պահանջում է վերանայում:
Ո՞րն է վճիռը:
2:22 Ես կվերանայեի յուրաքանչյուր join մինչև թարմացումը: Հարց ունե՞ք այս մասին: Տեղադրեք այն մեկնաբանություններում: Եվ դա է այսօրվա diff-ը: Ես Նիկոն եմ Axrisi-ից: Միավորվեք պատասխանատվությամբ:
Աղբյուրներ
- Release of Polars 2.0Polars (pola.rs)
- Polars 2.0 upgrade guidePolars documentation
- Polars homepagePolars (pola.rs)
- polars-2.0-benchmark repositoryPolars on GitHub
- Release of Polars 2.0 (Hacker News discussion)Hacker News



