+− THE DAILY DIFFdev & AI news
NEEDS REVIEW

Polars 2.0: hvorfor joins ikke længere bevarer deres rækkefølge

Polars 2.0 kører som standard indsamling på en streaming-motor.

Polars 2.0 kører som standard indsamling på en streaming-motor. For join, group_by og unpivot garanterer udgivelsen ikke længere inputrækkefølgen, medmindre du eksplicit indstiller maintain_order eller sort. I vores kørsel på polars 2.0.0 returnerede en 2.000.000-rækkes indre join som standard rækker ud af inputrækkefølgen og bevarede rækkefølgen med maintain_order indstillet. Udgivelsen slår også ud-af-kerne spild til og gør benchmark-påstandene til leverandørens egne.

Læs den skriftlige udgave (engelsk) ↗

Hvad denne video dækker

  • Opkald af collect() på en lazy forespørgsel bruger nu som standard streaming-motoren, som ikke garanterer rækkefølgen af rækker for join, group_by og unpivot.
  • Migrationsguiden siger, at rækkefølgen ikke længere er den samme som før 2.0 og er ikke garanteret; den anbefaler en eksplicit sortering, hvis du er afhængig af den.
  • I vores kørsel returnerede et standard indre join inputrækkefølge Falsk; maintain_order="left_right" på joinet returnerede Sandt. Én maskine, én kørsel, én join-form.
  • Ud-af-kerne spild er som standard aktiveret: det starter ved ca. 80% af RAM, med et standard diskbudget på 64 GB. Ud-af-kerne join og group_by er på køreplanen.
  • collect_schema() fanger en manglende kolonne, før data læses, men et cast, der kun fejler på én værdi, fejler først ved collect().
  • TPC-H og TPC-DS sammenligningen er leverandørens egen kørsel på afledte data, og dens fodnote siger, at resultaterne ikke kan sammenlignes med officielle benchmarks.

Oversat udskrift

Oversat fra den originale engelske fortælling. Tilgængelig lyd og undertekster styres af YouTube.

Hvorfor ændrede standardrækkefølgen sig?

0:00 Du tror, at et join giver dine rækker tilbage i den rækkefølge, du skrev dem. Polars 2.0 stoppede med at love det, som standard, med vilje. I denne video: hvorfor ændrede standarden sig? Hvad købte det? Og hvilken af dine scripts går først i stykker? Dette er The Daily Diff, under kølerhjelmen. Polars er et open source DataFrame-bibliotek: en tabelmotor, du kalder fra Python,

0:20 med dens kerne skrevet i Rust. Det er gratis under MIT-licensen, og du installerer det med pip install polars. En detalje først. Kontakten, der bringer den gamle rækkefølge tilbage, er et argument til selve joinet. Jeg vender tilbage til det til sidst. Siden 2.0 kører collect streaming-motoren som standard. Streaming opdeler forespørgslen i bidder, der kører parallelt, og biderne er færdige, når de er færdige.

0:42 For join, group by og unpivot lover udgivelsen ikke en rækkefølge. Hvem bliver ramt først? Den, der sammenligner output med en gemt fil, række for række. Den test kan bestå på din bærbare computer og fejle på en anden maskine. Dernæst migrationsguiden.

Hvad lover migrationsguiden?

0:57 Den siger, at den præcise rækkefølge vist ovenfor ikke er garanteret. Så hvis du er afhængig af rækkefølgen, sorter eksplicit. Ud-af-kerne er også aktiveret som standard. Det begynder at spilde til disk ved omkring firs procent af RAM, med et fireogtres gigabyte budget. Sortering, vinduesfunktioner og mange udtryk kan nu spilde. Joins og group-bys er på vej.

Er benchmarket en fair kamp?

1:17 Polars siger, at det slår DataFusion og DuckDB på TPC-H og TPC-DS benchmarks. Tallene kommer fra deres egne kørsler, på afledte data, og deres fodnote siger, at de ikke kan sammenlignes med officielle resultater. Deres egne tal siger, at Polars bliver omkring tre komma otte gange hurtigere fra seksten kerner til et hundrede tooghalvfems, på TPC-H. De siger også, at den store maskines ekstra tråde bremser små forespørgsler.

Hvad ser vi, når vi kører det?

1:41 Vi kørte det samme join to gange på Polars 2.0.0. Standardkørslen blander rækkerne. Med flaget overlever inputrækkefølgen. Find de joins, der føder en test. Ethvert join uden en sortering efter det er en rækkeordensbeslutning, du aldrig har truffet. Polars 2.0 er strengere med typer.

Betyder strengere tidligere?

1:58 Skemakontrollen fanger en manglende kolonne, før data læses. Den kan ikke fange et cast, der fejler på én række, fordi den fejl venter på dataene. Nu den løkke, jeg åbnede.

Hvordan får jeg den gamle rækkefølge tilbage?

2:08 Kontakten sidder på joinet. Indstil maintain order på joinet, eller tilføj en sortering efter det. Guiden foreslår sorteringen. Join-flaget bevarede rækkefølgen i vores kørsel, med venstre sides rækkefølge bevaret som venstre, højre. Dom, under kølerhjelmen: REQUIRES REVIEW.

Hvad er dommen?

2:22 Jeg ville gennemgå hvert join før opgradering. Har du et spørgsmål om dette? Skriv det i kommentarerne. Og det var diffen for i dag. Jeg er Niko fra Axrisi. Merge ansvarligt.

Kilder

  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

Relaterede videoer