Optimalisering av lav tilfeldig fletting i Delta-tabeller

Delta Lake MERGE-kommandoen lar brukere oppdatere en Delta-tabell med avanserte betingelser. Den kan oppdatere data fra en kildetabell, visning eller DataFrame til en måltabell ved hjelp MERGE av kommando. Gjeldende algoritme er imidlertid ikke fullstendig optimalisert for håndtering av umodifiserte rader. Med optimalisering av lav shuffle-fletting utelates umodifiserte rader fra en dyr shuffling-operasjon som er nødvendig for å oppdatere samsvarende rader.

Bemerkning

Lav shuffle-fletting er tilgjengelig og aktivert som standard i alle Fabric Spark-kjøretider for å forbedre ytelsen til MERGE operasjoner dramatisk.

Hvorfor vi trenger lav shuffle-fletting

Operasjonen utføres for øyeblikket MERGE av to sammenføyningskjøringer. Den første sammenføyningen bruker hele måltabellen og kildedataene til å finne en liste over berørte filer i måltabellen, inkludert eventuelle samsvarende rader. Deretter utfører den den andre sammenføyningen som bare leser de berørte filene og kildedataene, for å utføre faktisk tabelloppdatering. Selv om den første sammenføyningen er å redusere mengden data for den andre sammenføyningen, kan det fortsatt være et stort antall umodifiserte rader i berørte filer. Den første sammenføyningsspørringen er lysere fordi den bare leser kolonner i den angitte samsvarende betingelsen. Den andre for tabelloppdatering må laste inn alle kolonnene, noe som medfører en dyr shuffling-prosess.

Med optimalisering av lav shuffle-sammenslåing beholder Delta det samsvarende radresultatet fra den første sammenføyningen midlertidig og bruker det for den andre sammenføyningen. Basert på resultatet utelukker det ikke-modifiserte rader fra den tunge shuffling-prosessen. Det ville være to separate skrivejobber for samsvarende rader og umodifiserte rader, og dermed kan det resultere i 2x antall utdatafiler sammenlignet med den forrige virkemåten. Den forventede ytelsesgevinsten oppveier imidlertid det mulige problemet med små filer.

Fordeler med lav tilfeldig fletting

  • Umodifiserte rader i berørte filer håndteres separat og går ikke gjennom den faktiske MERGE-operasjonen. Den kan lagre den totale kjøringstiden for SAMMENSLÅING og databehandlingsressurser. Gevinsten blir større når mange rader kopieres og bare noen få rader oppdateres.
  • Radrekkefølger bevares for umodifiserte rader. Derfor kan utdatafilene for umodifiserte rader fortsatt være effektive for å hoppe over data hvis filen ble sortert eller Z-BESTILT.
  • Det ville være lite overhead selv i verste fall når MERGE-betingelsen samsvarer med alle rader i berørte filer.

Slik aktiverer og deaktiverer du Low Shuffle Merge

Lav shuffle-fletting aktiveres som standard som en Spark-øktkonfigurasjon:

SET spark.microsoft.delta.merge.lowShuffle.enabled = TRUE