Del via


Komprimering av Delta-tabeller

Delta-tabellfiler blir fragmentert over tid. Fragmentering øker filoperasjonsoverhead, reduserer komprimeringseffektiviteten og kan begrense leserens parallellisme. Kompaktering omskriver mange små filer til færre filer i riktig størrelse slik at Spark kan lese og behandle data mer effektivt.

Kommandoen OPTIMIZE er den primære komprimeringsoperasjonen. Den grupperer små filer i mapper som retter seg mot en ideell filstørrelse, og skriver dem deretter om til storage.

For veiledning på tvers av arbeidsbelastninger om komprimeringsstrategier på tvers av SQL Analytics Endpoint, Power BI Direct Lake og Spark, se vedlikehold og optimalisering av tverrarbeidsbelastningstabeller.

Komprimeringsmetoder

Microsoft Fabric tilbyr flere tilnærminger for å opprettholde optimale filstørrelser i Delta-tabeller:

OPTIMIZE kommando

Kommandoen OPTIMIZE er den grunnleggende operasjonen for å komprimere Delta-tabeller. Den omskriver små filer til større filer for å forbedre dataoppsettet i Delta-tabeller.

OPTIMIZE dbo.table_name
Eiendom Beskrivelse Standardverdi Konfigurasjon av økt
minFileSize Filer som er mindre enn denne terskelen, grupperes sammen og skrives om til større filer. 1073741824 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Målfilstørrelse produsert av kommandoen OPTIMIZE . 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE er idempotent, men en oversized minFileSize kan øke skriveforsterkningen. For eksempel, med minFileSize satt til 1 GB, kan en 900 MB-fil bli omskrevet etter en liten ekstra skriving. For automatisk veiledning for filstørrelseshåndtering, se adaptiv målfilstørrelse.

OPTIMIZE med Z-Order

Når du bruker klausulen ZORDER BY , OPTIMIZE omskriver den aktive filer slik at rader med lignende verdier er samlokalisert i de samme filene. Dette forbedrer filhopp for selektive filtre. Bruk Z-Order når:

  • Spørringene filtreres ofte på to eller flere kolonner sammen (for eksempel dato + customer_id), og
  • Disse predikatene er selektive nok til at hopping på filnivå reduserer antall filer som skannes.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE med V-Order

Setningen VORDER resulterer i at filene som er begrenset for komprimering, har V-Order-optimaliseringen brukt. For mer informasjon om V-Order, se den detaljerte dokumentasjonen.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE med væskeklynger

Væskeklynger er spesifisert som et tabellalternativ; Se Aktiver væskeklynger for mer informasjon. Når flytende klynger er aktivert, OPTIMIZE utfører den fysiske omskrivingen som bruker klyngepolicyen.

Viktig!

Data grupperes bare når OPTIMIZE de kjøres på flytende grupperte aktiverte tabeller. Vanlige skriveoperasjoner grupperer IKKE dataene. Å ha en komprimeringsstrategi, for eksempel bruk av automatisk komprimering eller manuell planlegging av optimaliseringsjobber, er avgjørende for å sikre at fordelene med grupperte data (det vil si forbedret hopping av Delta-filer) kan realiseres.

Rask optimalisering

Rask optimalisering analyserer Delta-tabellfiler på en intelligent måte og hopper over komprimeringsoperasjoner som sannsynligvis ikke vil forbedre ytelsen på en meningsfull måte.

I stedet for å blindt komprimere filer når det finnes små filer, evaluerer rask optimalisering om hver kandidathylle (gruppe med små filer) oppfyller konfigurerbare komprimeringsmål for beste praksis. Fast Optimize kjører bare komprimering på en hylle med filer hvis sammenslåing av dem sannsynligvis vil nå minimumsmålstørrelsen, eller hvis det er for mange små filer. Ellers hopper den over den gruppen eller reduserer hvor mange filer den komprimerer.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

Rask optimalisering kan finjusteres basert på dine komprimeringsforventninger:

Eiendom Beskrivelse Standardverdi Konfigurasjon av økt
minNumFiler Antall små filer som må finnes i en hylle for at optimalisering skal utføres hvis hyllen ikke inneholder nok data som er beregnet til å produsere en komprimert fil. 50 spark.microsoft.delta.optimize.fast.minNumFiler
parkettKoeffisient Multiplisert med minste filstørrelse for optimalisering av kontekst for å bestemme minimumsmengden små fildata som må finnes i en hylle for at hyllen skal inkluderes i komprimeringsomfanget. 1.3 spark.microsoft.delta.optimize.fast.parquetKoeffisient

Note

Resultatet parquetCoefficient er at målstørrelsen for en hylle er større enn den minste målfilstørrelsen for optimaliseringskonteksten. Denne koeffisienten forklarer realiteten at kombinasjon av flere små parkettfiler resulterer i bedre komprimering, og dermed mindre data enn summen av små filer. Denne verdien kan økes for å være mer konservativ i hvor ofte rask optimalisering hopper over hyller, eller reduseres for å tillate mer tillatt hopping over hyller.

Slik fungerer det

Rask optimalisering introduserer ekstra kontroller før søppelkasser komprimeres. For hver kandidathylle evaluerer rask optimalisering:

  • Den estimerte mengden rådata i hyllen (summen av små filstørrelser)
  • Om kombinasjonen av de små filene anslås å produsere en fil som oppfyller den konfigurerte minimumsmålstørrelsen
  • Om hyllen inneholder minst det konfigurerte minimumsantallet små filer

Rask optimalisering evaluerer hver hylle med små filer og komprimerer bare de små filene som sannsynligvis vil nå minimumsmålstørrelsen eller overskride minimumsantallet filer. Hyller som ikke oppfyller disse tersklene, hoppes over eller komprimeres delvis. Å hoppe over suboptimale hyller reduserer unødvendige omskrivinger, reduserer skriveforsterkning og gjør OPTIMIZE-jobber mer idempotente.

Skjermbilde som viser hvor raskt optimalisering evalueres hvis en hylle komprimeres.

Note

Den nøyaktige implementeringen kan endres over tid.

Rask optimalisering kan redusere omskrevet data over en Delta-tabell livssyklus. Som vist i diagrammet nedenfor, hopper rask optimalisering over suboptimale bins, noe som resulterer i raskere og mer idempotente OPTIMIZE jobber med mindre skriveforsterkning.

Skjermbilde som viser hvor raskt optimalisering resulterer i mindre dataomskriving over tid.

Note

Bare for illustrasjonsformål antar diagrammene ovenfor at størrelsen på filen som skrives fra komprimering er summen av størrelsen på små filer. Det innebærer også a parquetCoefficient på 1.

Begrensninger
  • Gjelder ikke for væskeklynger og Z-ordreoperasjoner
  • Rask optimalisering endrer ikke virkemåten til automatisk komprimering

Komprimeringsmål på filnivå

For å unngå omskriving av data som tidligere ble ansett som komprimerte (store nok) basert på endring av mål for komprimering av min. og maks filstørrelse, spark.microsoft.delta.optimize.fileLevelTarget.enabled kan aktiveres for å forhindre omkomprimering av allerede komprimerte filer. Når den er aktivert, komprimeres ikke filer på nytt hvis de tidligere oppfylte minst halvparten av målfilstørrelsen på komprimeringstidspunktet. Å opprettholde filnivåmål minimerer skriveforsterkning ettersom kompakteringsmålstørrelsen endres over tid (for eksempel fra adaptiv målfilstørrelse, evaluere og sette et større mål). Hvis den er aktivert, legges koden OPTIMIZE_TARGET_SIZE til i nye filer når OPTIMIZE kjøres, eller for en skriveoperasjon hvis egenskapen delta.targetFileSize eller delta.targetFileSize.adaptive table er angitt.

Note

Selv om det ikke er aktivert som standard, anbefaler Microsoft å aktivere komprimeringsmål på filnivå for å begrense potensiell skriveforsterkning.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Automatisk komprimering

Automatisk komprimering evaluerer partisjonstilstanden etter hver skriveoperasjon. Når den oppdager overdreven filfragmentering (for mange små filer) i en partisjon, utløser den en synkron OPTIMIZE operasjon umiddelbart etter at skrivingen er utført. Denne forfatterdrevne tilnærmingen til filvedlikehold er optimal fordi komprimering bare utføres når det er programmatisk fastslått å være fordelaktig.

Aktiver på sesjonsnivå

Satt spark.databricks.delta.autoCompact.enabled på sesjonsnivå for å aktivere automatisk komprimering for nye tabeller opprettet i den Spark-økten:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Aktiver på tabellnivå

Sett tabellegenskap delta.autoOptimize.autoCompact for å aktivere automatisk komprimering for spesifikke tabeller:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Bruk DataFrameWriter-alternativet delta.autoOptimize.autoCompact for å aktivere automatisk komprimering når du oppretter en tabell:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

Aktiver samme tabellegenskap på en eksisterende tabell:

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Juster automatisk komprimeringsgrenser

Juster automatisk komprimeringsoppførsel ved å sette disse Spark-sesjonskonfigurasjonene:

Eiendom Beskrivelse Standardverdi Konfigurasjon av økt
maxFileSize Maksimal målfilstørrelse i byte for komprimerte filer. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Minste filstørrelse i byte for at en fil skal anses som komprimert. Alt under denne terskelen vurderes for komprimering og telles mot terskelen minNumFiles . Frakoblet som standard, beregnet som 1/2 av med maxFileSize mindre du eksplisitt angir en verdi. spark.databricks.delta.autoCompact.minFileSize
minNumFiler Minimum antall filer som må eksistere under terskelen minFileSize for at automatisk komprimering skal utløses. 50 spark.databricks.delta.autoCompact.minNumFiles

Velg mellom automatisk komprimering og planlagt OPTIMIZE

Microsoft anbefaler automatisk komprimering som standardstrategi for de fleste inntastingsarbeidsbelastninger. Den overgår vanligvis faste tidsplaner og reduserer den operative belastningen ved å vedlikeholde OPTIMIZE jobber.

Hvis latensmålene dine er strenge, kan det være bedre å planlegge OPTIMIZE på en separat Spark-pool fordi automatisk komprimering kjører synkront etter skriving.

Bruk kompaktering sammen med småfilforebyggingsfunksjoner som optimaliser, skriv. For veiledning, se Optimaliser skriv.

Vedlikehold av Lakehouse-bord

Du kan utføre ad hoc-vedlikeholdsoperasjoner, for eksempel OPTIMIZE fra Lakehouse Explorer. For mer informasjon, se vedlikehold av Lakehouse-tabellen.

Sammendrag av anbefalte fremgangsmåter

Bruk disse anbefalingene for å balansere skrivekostnader, leseytelse og vedlikeholdsoverhead for Delta-tabellkomprimering.

  • Aktiver automatisk komprimering for inntak pipelines med hyppige små skrivinger (streaming eller mikrobatch) for å redusere manuell planlegging.
  • Bruk automatisk komprimering selektivt for andre skrivemønstre når dine servicenivåmål tåler sporadiske topper i skrive-latens.
  • Planlegg full tabell OPTIMIZE under stille vinduer når du må skrive om mange partisjoner eller bruke Z-Order.
  • Aktiver rask optimalisering for å redusere skriveforsterkning og lage OPTIMIZE mer idempotent.
  • Slå til filnivå-komprimeringsmål for å redusere unødvendig omkompresjon etter hvert som målfilstørrelser øker over tid.
  • Bruk optimalisering av skriving i egnede inntastingsstier fordi forhåndskomprimering ofte er rimeligere enn etterskriving komprimering. For veiledning, se Optimaliser skriv.