Del via


Komprimering af Delta-borde

Delta-tabelfiler bliver fragmenterede over tid. Fragmentering øger fildriftsomkostninger, reducerer komprimeringseffektiviteten og kan begrænse læserens parallelisme. Kompaktering omskriver mange små filer til færre filer i den rigtige størrelse, så Spark kan læse og behandle data mere effektivt.

Kommandoen OPTIMIZE er den primære komprimeringsoperation. Den grupperer små filer i beholdere, der sigter mod en ideel filstørrelse, og omskriver dem derefter til storage.

For vejledning på tværs af arbejdsbelastninger om kompaktionsstrategier på tværs af SQL Analytics Endpoint, Power BI Direct Lake og Spark, se vedligeholdelse og optimering af tværarbejdsbelastningstabeller.

Komprimeringsmetoder

Microsoft Fabric tilbyder flere tilgange til at opretholde optimale filstørrelser i Delta-tabeller:

OPTIMIZE kommando

Kommandoen OPTIMIZE er den grundlæggende handling til at komprimere Delta-tabeller. Den omskriver små filer til større filer for at forbedre datalayoutet i Delta-tabeller.

OPTIMIZE dbo.table_name
Egenskab Beskrivelse Standardværdi Konfiguration af session
minFileSize Filer, der er mindre end denne grænse, grupperes sammen og omskrives som større filer. 1073741824 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Målfilstørrelse produceret af kommandoen OPTIMIZE . 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE er idempotent, men en oversized minFileSize kan øge skriveforstærkningen. For eksempel minFileSize kan en 900 MB fil omskrives efter en lille ekstra skrivning med 1 GB. For automatisk vejledning til filstørrelsesstyring, se adaptiv målfilstørrelse.

OPTIMIZE med Z-Order

Når du bruger klausulen ZORDER BY , omskriver den aktive filer, OPTIMIZE så rækker med lignende værdier er samlet i de samme filer. Dette forbedrer filspringning for selektive filtre. Brug Z-Order, når:

  • Dine forespørgsler filtrerer ofte på to eller flere kolonner sammen (f.eks. dato + customer_id), og
  • Disse prædikater er selektive nok til, at spring på filniveau reducerer antallet af scannede filer.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE med V-Order

Klausulen VORDER resulterer i, at de filer, der er begrænset til komprimering, får V-Order-optimeringen anvendt. For mere information om V-Order, se den detaljerede dokumentation.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE med væskeklynger

Væskeklynger er angivet som en tabelindstilling; Se Aktivér væskeklynger for at få flere oplysninger. Når flydende klynger er aktiveret, udføres den fysiske omskrivning, OPTIMIZE der anvender klyngepolitikken.

Vigtigt!

Data grupperes kun, når OPTIMIZE de køres på flydende grupperede aktiverede tabeller. Regelmæssige skrivehandlinger grupperer IKKE dataene. Det er vigtigt at have en komprimeringsstrategi, f.eks. ved hjælp af automatisk komprimering eller manuel planlægning af optimeringsjob, for at sikre, at fordelene ved klyngedata (dvs. forbedret Delta-filspring) kan realiseres.

Hurtig optimering

Hurtig optimering analyserer intelligent Delta-tabelfiler og springer komprimeringshandlinger over, der sandsynligvis ikke vil forbedre ydeevnen meningsfuldt.

I stedet for blindt at komprimere filer, når der findes små filer, evaluerer Fast Optimize, om hver kandidatbeholder (gruppe af små filer) opfylder konfigurerbare mål for komprimering af bedste praksis. Fast Optimize kører kun komprimering på en bakke med filer, hvis det er sandsynligt, at fletning af dem vil nå din mindste målstørrelse, eller hvis der er for mange små filer. Ellers springer den gruppen over eller reducerer, hvor mange filer den komprimerer.

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

Hurtig optimering kan finjusteres baseret på dine komprimeringsforventninger:

Egenskab Beskrivelse Standardværdi Konfiguration af session
minNumFiles Antallet af små filer, der skal findes i en placering, for at optimering kan udføres, hvis placeringen ikke indeholder nok data, der er estimeret til at producere en komprimeret fil. 50 spark.microsoft.delta.optimize.fast.minNumFiler
parketKoefficient Ganget med den mindste filstørrelse for optimering af kontekst for at bestemme den mindste mængde små fildata, der skal findes i en placering, for at placeringen kan medtages i komprimeringsomfanget. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Notat

Resultatet parquetCoefficient er, at målstørrelsen for en placering er større end den mindste målfilstørrelse for optimeringskonteksten. Denne koefficient tager højde for den virkelighed, at kombination af flere små parketfiler resulterer i bedre komprimering og dermed færre data end summen af små filer. Denne værdi kan øges for at være mere konservativ med hensyn til, hvor ofte hurtig optimering springer placeringer over, eller reduceres for at tillade mere tilladt overspringning af placeringer.

Sådan fungerer det

Hurtig optimering introducerer ekstra kontroller, før skraldespande komprimeres. For hver kandidatbeholder evaluerer hurtig optimering:

  • Den anslåede mængde rådata i placeringen (summen af små filstørrelser)
  • Om kombinationen af de små filer anslås at producere en fil, der opfylder den konfigurerede minimumsmålstørrelse
  • Om placeringen mindst indeholder det konfigurerede mindste antal små filer

Hurtig optimering evaluerer hver placering med små filer og komprimerer kun de små filer, der sandsynligvis vil nå den mindste destinationsstørrelse eller overskride det mindste antal filer. Placeringer, der ikke opfylder disse tærskler, springes over eller komprimeres delvist. Hvis du springer suboptimale placeringer over, reduceres unødvendige omskrivninger, skriveforstærkning sænkes og OPTIMER-job bliver mere idempotente.

Skærmbillede, der viser, hvor hurtigt optimering evalueres, hvis en beholder komprimeres.

Notat

Den nøjagtige implementering kan udvikle sig over tid.

Hurtig optimering kan reducere omskrevne data over en Delta-tabels livscyklus. Som vist i det følgende diagram, springer hurtig optimering suboptimale bins over, hvilket resulterer i hurtigere og mere idempotente OPTIMIZE jobs med mindre skriveforstærkning.

Skærmbillede, der viser, hvor hurtigt optimering resulterer i mindre dataomskrivning over tid.

Notat

Kun til illustrationsformål antager ovenstående diagrammer, at størrelsen af filen skrevet fra komprimering er summen af størrelsen af små filer. Det indebærer også a parquetCoefficient på 1.

Begrænsninger
  • Gælder ikke for væskeklynger og Z-Order-operationer
  • Hurtig optimering ændrer ikke funktionsmåden for automatisk komprimering

Komprimeringsmål på filniveau

For at undgå omskrivning af data, der tidligere blev betragtet som komprimerede (store nok) baseret på ændring af mål for komprimering af min. og maks. filstørrelse, spark.microsoft.delta.optimize.fileLevelTarget.enabled kan aktiveres for at forhindre omkomprimering af allerede komprimerede filer. Når den er aktiveret, komprimeres filer ikke, hvis de tidligere har opfyldt mindst halvdelen af målfilstørrelsen på komprimeringstidspunktet. Vedligeholdelse af filniveaumål minimerer skriveforstærkning, da kompaktionsmålets størrelse ændrer sig over tid (for eksempel fra adaptiv målfilstørrelse, evaluering og sætning af et større mål). Hvis den er aktiveret, føjes OPTIMIZE_TARGET_SIZE koden til nye filer, når OPTIMIZE køres, eller til en skrivehandling, hvis egenskaben delta.targetFileSize eller delta.targetFileSize.adaptive tabel er angivet.

Notat

Selvom det ikke er aktiveret som standard, anbefaler Microsoft, at du aktiverer komprimeringsmål på filniveau for at begrænse potentiel skriveforstærkning.

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

Automatisk komprimering

Automatisk komprimering evaluerer partitionstilstanden efter hver skrivehandling. Når den registrerer overdreven filfragmentering (for mange små filer) i en partition, udløser den en synkron OPTIMIZE handling umiddelbart efter, at skrivningen er begået. Denne forfatterdrevne tilgang til filvedligeholdelse er optimal, fordi komprimering kun udføres, når det er programmatisk bestemt at være gavnligt.

Aktiver på sessionsniveau

Sat spark.databricks.delta.autoCompact.enabled på sessionsniveau for at muliggøre automatisk komprimering for nye tabeller oprettet i den Spark-session:

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

Aktiver på tabelniveau

Sæt tabelegenskab delta.autoOptimize.autoCompact for at aktivere automatisk komprimering for specifikke tabeller:

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

Brug DataFrameWriter-muligheden delta.autoOptimize.autoCompact til at aktivere automatisk komprimering, når du opretter en tabel:

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

Aktiver den samme tabelegenskab på en eksisterende tabel:

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

Juster automatisk komprimeringstærskler

Oppas automatisk komprimeringsadfærd ved at indstille disse Spark-sessionskonfigurationer:

Egenskab Beskrivelse Standardværdi Konfiguration af session
maxFileSize Den maksimale målfilstørrelse i bytes for komprimerede filer. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Den mindste filstørrelse i byte for en fil, der kan betragtes som komprimeret. Alt under denne tærskel tages i betragtning til komprimering og tælles med i tærsklen minNumFiles . Frakoblet som standard, beregnet som 1/2 af værdien maxFileSize , medmindre du eksplicit angiver en værdi. spark.databricks.delta.autoCompact.minFileSize
minNumFiles Det mindste antal filer, der skal eksistere under tærsklen minFileSize for, at automatisk komprimering kan udløses. 50 spark.databricks.delta.autoCompact.minNumFiles

Vælg mellem automatisk komprimering og planlagt OPTIMIZE

Microsoft anbefaler automatisk komprimering som standardstrategi for de fleste indlæsningsarbejdsbelastninger. Det overgår som regel faste tidsplaner og reducerer den operationelle byrde ved at vedligeholde OPTIMIZE opgaver.

Hvis dine latensmål er strenge, kan det være bedre at planlægge OPTIMIZE på en separat Spark-pool, fordi automatisk komprimering kører synkront efter skrivninger.

Brug kompaktering sammen med småfil-forebyggende funktioner som optimer skrivning. For vejledning, se Optimer skrivning.

Vedligeholdelse af lakehouse-bord

Du kan køre ad hoc vedligeholdelsesoperationer, som for eksempel OPTIMIZE fra Lakehouse Explorer. For mere information, se vedligeholdelse af Lakehouse-tabelen.

Oversigt over bedste praksis

Brug disse anbefalinger til at balancere skriveomkostninger, læseydelse og vedligeholdelsesoverhead for Delta-tabelkompaktering.

  • Aktiver automatisk komprimering til indlæsning pipelines med hyppige små skrivninger (streaming eller microbatch) for at reducere manuel planlægning.
  • Brug automatisk komprimering selektivt til andre skrivemønstre , når dine serviceniveaumål kan tåle lejlighedsvise spidser i skrive-latens.
  • Planlæg fuld-tabel OPTIMIZE under stille vinduer , når du skal omskrive mange partitioner eller anvende Z-Order.
  • Aktiver hurtig optimering for at reducere skriveforstærkning og lave OPTIMIZE mere idempotent.
  • Aktivér filniveau-kompaktionsmål for at reducere unødvendig omkomprimering, efterhånden som målfilstørrelserne stiger over tid.
  • Brug optimer skrivning i egnede indlæsningsstier , fordi pre-write komprimering ofte er billigere end post-write komprimering. For vejledning, se Optimer skrivning.