Del via


Justere størrelsen på Delta-tabeldatafiler

Filer af passende størrelse er vigtige for forespørgselsydeevne, ressourceudnyttelse og metadatastyring. Mindre filer øger opgaveomkostninger og metadataoperationer, mens større filer kan underudnytte parallelitet og skævvride I/O. Delta Lake bruger filmetadata til partitionsbeskæring og dataspring, så målretning af den rigtige filstørrelse sikrer effektiv læsning, skrivning og vedligeholdelse.

For anbefalinger om filstørrelse efter forbrugsscenarie (SQL Analytics Endpoint, Power BI Direct Lake, Spark), se Cross-workload table maintenance and optimization.

De følgende afsnit beskriver de vigtigste funktioner, du kan bruge til at justere filstørrelsen i Delta-tabeller.

Handlinger til justerbart datalayout

Optimer

Kommandoen OPTIMIZE omskriver små filer til større filer for at forbedre layoutet af data i Delta-tabeller. Du kan finde flere oplysninger, herunder oplysninger om justering af filstørrelse, i dokumentationen til kommandoen OPTIMIZE .

Automatisk komprimering

Automatisk komprimering evaluerer automatisk partitionens tilstand 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 generelt optimal, fordi komprimering kun udføres, når det er programmatisk bestemt at være gavnligt. Du kan finde detaljerede konfigurationsindstillinger og yderligere oplysninger i dokumentationen til automatisk komprimering .

Optimer skrivning

Optimer skrivning reducerer omkostningerne ved små filer ved at udføre komprimering før skrivning (bin packing), som genererer færre, større filer. Denne fremgangsmåde blander data i hukommelsen til beholdere i optimal størrelse, før Spark skriver Parquet-filerne, hvilket maksimerer potentialet for at generere filer i passende størrelse uden at kræve øjeblikkelige oprydningshandlinger efter skrivning.

Brug selektivt optimer, skriv. Shuffling kan tilføje unødvendig behandlingstid i nogle skrivestier. Optimere skrivning er mest fordelagtig, når skrivninger ellers ville skabe mange små filer, som senere kræver komprimering.

Skærmbillede, der viser, hvordan optimering af skrivning resulterer i færre filer, der bliver skrevet.

Optimer skrivning er almindeligvis gavnligt for:

  • Partitionerede tabeller
  • Borde med hyppige små indsatser
  • Handlinger, der sandsynligvis vil berøre mange filer (MERGE, UPDATE, og DELETE)

Hvis du vil anvende selektivt på bestemte tabeller, skal du fjerne sessionskonfigurationen og aktivere tabelegenskaben individuelt. Dette lader hver tabel kontrollere, om optimeret skrivning anvendes.

  1. Fjern optimer skrivning

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. Aktivér på individuel tabel

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

For at aktivere optimering af skrivning til alle partitionerede tabeller i en Spark-session, sikrer du at sessionskonfigurationen er uændret, og sæt spark.microsoft.delta.optimizeWrite.partitioned.enabledderefter :

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

Målfilstørrelsen genereret fra optimering af skrivning kan justeres via konfigurationen spark.databricks.delta.optimizeWrite.binSize .

Notat

Se ressourceprofiler for standardindstillinger for optimering af skrivning efter ressourceprofil.

Indstil målfilstørrelsen konsekvent

For at undgå at sætte separate minimums- og maksimumsfilstørrelser for sessioner til optimering, automatisk komprimering og optimering af skrivning, brug tabel-egenskaben delta.targetFileSize . Denne egenskab forener filstørrelsesadfærd på tabelniveau. Angiv værdien som en byte-streng (for eksempel 1073741824b, 1048576k, 1024m, ). 1g Når den er sat, har den forrang over sessionskonfigurationer og adaptiv målfilstørrelse.

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')

Adaptiv målfilstørrelse

Microsoft Fabric tilbyder adaptiv målfilstørrelse for at eliminere kompleksiteten ved manuelt at tune målfilstørrelsen for alle tabeller i en session eller individuelle tabeller via delta.targetFileSize tabelegenskaben. Adaptiv målfilstørrelse bruger Delta-tabelheuristik som tabelstørrelse til at estimere den ideelle målfilstørrelse og opdaterer automatisk målet, når forholdene ændres, hvilket sikrer optimal ydeevne uden manuel indgriben eller vedligeholdelsesomkostninger.

Aktivér adaptiv målfilstørrelse

Notat

Selvom det ikke er aktiveret som standard i øjeblikket, anbefaler Microsoft, at du aktiverer sessionskonfigurationen af den adaptive destinationsfilstørrelse .

Aktivér tilpasset destinationsfilstørrelse på tabeller, der er oprettet eller ændret i en Spark-session, ved at angive følgende Spark-sessionskonfiguration:

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

Forstå evalueringsadfærd

Når den er aktiveret, evalueres og angives den adaptive destinationsfilstørrelse i følgende scenarier:

  • CREATE TABLE AS SELECT og CREATE OR REPLACE TABLE AS SELECT drift
  • Overskriv skrivninger (f.eks. DataFrame.write.mode("overwrite") eller INSERT OVERWRITE)
  • Skriver i ErrorIfExists, Appendeller Ignore tilstand, når du opretter en ny tabel
  • I starten af kommandoen OPTIMIZE

Når den ideelle størrelse er indstillet, fortsætter den med at reevaluere i starten af hver OPTIMIZE handling for at sikre, at den aktuelle heuristik afspejler den seneste datadistribution og tabelvækst. Denne adaptive fremgangsmåde opdaterer automatisk destinationsfilstørrelsen over tid, hvilket fjerner behovet for manuel justering, samtidig med at forespørgsels- og skriveydeevnen bevares, efterhånden som dine data vokser. Når du har brug for at låse en bestemt størrelse, f.eks. i hyperjustering eller test af brugssager, kan du tilsidesætte den adaptive indstilling ved eksplicit at angive den brugerdefinerede delta.targetFileSize tabelegenskab.

Juster adaptive målfilstørrelsesgrænser

Adaptiv destinationsfilstørrelse kan konfigureres yderligere via følgende Spark-sessionskonfigurationer:

Egenskab Beskrivelse Standardværdi Konfiguration af session
minFileSize Angiver den mindste filstørrelse (nedre grænse) som en bytestreng, som Adaptiv destinationsfilstørrelse bruger, når den evalueres. Skal være mellem 128 MB og 1 GB. 128 m spark.microsoft.delta.targetFileSize.adaptive.minFileSize
maxFileSize Angiver den maksimale filstørrelse (øvre grænse) som en bytestreng, som Adaptiv destinationsfilstørrelse bruger, når den evalueres. Skal være mellem 128 MB og 1 GB. 1024m spark.microsoft.delta.targetFileSize.adaptive.maxFileSize
stopAtMaxSize Når true, stopper yderligere størrelsesevalueringer, når den beregnede målfilstørrelse når , maxFileSizehvilket reducerer eventuelle evalueringsomkostninger på meget store tabeller. true spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize

Notat

Når stopAtMaxSize den er aktiveret (standard), forbliver den adaptive målstørrelse fast på den maksimale værdi, når den er nået, så du undgår ekstra beregninger. Hvis dine tabeller kan blive mindre, når de er vokset, skal du angive denne egenskab til false for at tillade genberegning under maksimumgrænsen.

Inspektér vurderet målstørrelse

Du kan revidere den evaluerede adaptive målfilstørrelse ved at inspicere tabellens detaljer og egenskaber fra DESCRIBE DETAIL eller DESCRIBE EXTENDED. Den evaluerede værdi skrives som en byte-streng i tabelegenskaben delta.targetFileSize.adaptive .

Denne værdi bruges som mål- (eller maks-) størrelse for optimering, automatisk komprimering og optimering af skrivning. Den relaterede minimumsværdi beregnes som halvdelen af delta.targetFileSize.adaptive.

Forstå præstationspåvirkning

Følgende diagram illustrerer forholdet mellem tabelstørrelse og den optimale parketfilstørrelse. For tabeller under 10 GB evaluerer Fabric Spark Runtime destinationsfilstørrelsen til at være 128 MB. Efterhånden som tabelstørrelsen vokser, skaleres målfilstørrelsen lineært og når op til 1 GB for tabeller, der overstiger 10 TB.

Diagram, der illustrerer forholdet mellem tabelstørrelse og optimal parketfilstørrelse.

At starte i det små med 128 MB og derefter skalere størrelsen på parketfiler, efterhånden som en tabel vokser i størrelse, har overlappende fordele:

  • Forbedret Delta-filspring: Filer i korrekt størrelse understøtter optimal dataklyngedannelse og spring, hvilket gør det muligt for Deltas filspringsprotokol at eliminere flere irrelevante filer under forespørgselsudførelse. En lille tabel med 128 MB filer i stedet for 1 GB filer muliggør 8 gange mere mulig filspring.

  • Reducerede opdateringsomkostninger: MERGE og UPDATE operationer omskriver kun berørte filer. Filer i den rigtige størrelse minimerer antallet af filer, der berøres pr. handling, hvilket reducerer mængden af data, der omskrives. Når Deletion Vectors er aktiveret, bliver korrekt filstørrelse afgørende: gravsten på rækkeniveau i overdimensionerede filer resulterer i betydelige oprydningsomkostninger under komprimering eller rensning.

  • Optimeret parallelitet: Filer i den rigtige størrelse gør det muligt for Spark at opnå ideel opgaveparallelitet. For mange små filer overvælder planlæggeren; for få store filer underudnytter din Spark-pulje. Optimal dimensionering maksimerer både læse- og skrivegennemløb.

Adaptiv målfilstørrelse kan forbedre komprimeringsydelsen og forespørgsels-/skrivelatens, når den vælger en bedre størrelse end standardkonfigurationen. Hvis adaptiv evaluering giver samme størrelse som standardkonfigurationen for Spark-sessioner, forventes ingen målbar forbedring.

Vigtigt!

Skriveforstærkning opstår, når tidligere komprimerede filer omskrives, efterhånden som målfilstørrelsen stiger over tid. For at reducere denne risiko skal filniveau-komprimeringsmål (spark.microsoft.delta.optimize.fileLevelTarget.enabled=true) aktiveres. Denne indstilling hjælper med at bevare tidligere komprimeringsarbejde ved at springe unødig rekomprimering af filer over, der allerede var komprimeret under tidligere målstørrelser. For mere information, se filniveau-kompaktionsmål.

Oversigt over bedste praksis

Brug disse anbefalinger til at balancere skriveomkostninger, læseydelse og vedligeholdelsesomkostninger, efterhånden som tabellerne vokser.

  • Aktiver automatisk komprimering til indlæsning pipelines med hyppige små skrivninger (streaming eller micro-batch), så filens sundhed opretholdes uden manuel planlægning.
  • Brug automatisk komprimering selektivt til andre skrivemønstre , når dine serviceniveaumål kan tåle lejlighedsvise spidser i skrive-latens.
  • Aktivér adaptiv målfilstørrelse for at reducere manuel justering og holde målstørrelser tilpasset tabelens vækst.
  • Brug Optimize write in controlled reading-stier (batchjobs, der kan tåle shuffle, partitionerede skrivninger eller hyppige små skrivninger) for at reducere komprimeringspresset nedstrøms.
  • 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. Se hurtig optimer.
  • Brug delta.targetFileSize vores adaptive målfilstørrelse konsekvent for at optimere, autokomprimere og optimere skrivefilstørrelser for at konvergere på kompatible filstørrelsesmål.
  • Aktivér filniveau-kompaktionsmål for at reducere unødvendig omkomprimering, efterhånden som målfilstørrelserne stiger over tid.