Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Delta-tabelbestanden worden na verloop van tijd gefragmenteerd. Fragmentatie verhoogt de overhead van bestandsbewerkingen, vermindert de efficiëntie van compressie en kan parallelle uitvoering van lezers beperken. Met compressie worden veel kleine bestanden herschreven in minder bestanden met de juiste grootte, zodat Spark gegevens efficiënter kan lezen en verwerken.
De OPTIMIZE opdracht is de primaire compressiebewerking. Het groepeert kleine bestanden in clusters die gericht zijn op een ideale bestandsgrootte en herschrijft ze vervolgens op opslag.
Zie Tafelonderhoud en optimalisatie voor meerdere werkbelastingen voor compactiestrategieën in SQL Analytics Endpoint, Power BI Direct Lake en Spark.
Compressiemethoden
Microsoft Fabric biedt verschillende benaderingen voor het onderhouden van optimale bestandsgrootten in Delta-tabellen:
OPTIMIZE opdracht
De OPTIMIZE opdracht is de basisbewerking voor het comprimeren van Delta-tabellen. Het herschrijft kleine bestanden in grotere bestanden om de gegevensindeling in Delta-tabellen te verbeteren.
| Vastgoed | Description | Standaardwaarde | Sessieconfiguratie |
|---|---|---|---|
| minFileSize | Bestanden die kleiner zijn dan deze drempelwaarde, worden gegroepeerd en herschreven als grotere bestanden. | 1073741824 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Doelbestandsgrootte geproduceerd door de OPTIMIZE opdracht. |
1073741824 (1 GB) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE is idempotent, maar een te grote minFileSize kan de schrijfversterking verhogen. Als minFileSize dit bijvoorbeeld is ingesteld op 1 GB, kan een bestand van 900 MB opnieuw worden geschreven na een kleine extra schrijfbewerking. Zie adaptieve doelbestandsgrootte voor richtlijnen voor automatisch beheer van bestandsgrootten.
OPTIMIZE met Z-Order
Wanneer u de ZORDER BY component gebruikt, OPTIMIZE worden actieve bestanden herschreven, zodat rijen met vergelijkbare waarden in dezelfde bestanden worden opgenomen. De gecolokaliseerde lay-out verbetert het overslaan van bestanden bij selectieve filters. Gebruik Z-Order wanneer:
- Uw queries gebruiken vaak als filter twee of meer velden samen (bijvoorbeeld datum + customer_ID) en
- Deze predicaten zijn selectief genoeg dat het overslaan op bestandsniveau het aantal gescande bestanden vermindert.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE met V-Order
De VORDER component resulteert in het bestandenbereik voor compressie, waarbij de V-Order-optimalisatie is toegepast. Zie de gedetailleerde documentatie voor meer informatie over V-Order.
OPTIMIZE dbo.table_name VORDER
U kunt Z-Order en V-Order combineren in één opdracht. Spark past de bewerkingen in deze volgorde toe: bin compaction → Z-Order → V-Order.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
Het gedrag van V-Order tijdens OPTIMIZE hangt af van de manier waarop u de opdracht aanroept:
| Aanroep | Gedrag |
|---|---|
OPTIMIZE table VORDER |
Past V-Order toe op herschreven bestanden, ongeacht de instellingen voor de sessie of de tabel. |
OPTIMIZE table (geen VORDER trefwoord) |
Neemt het gedrag van de V-order over van TBLPROPERTIES("delta.parquet.vorder.enabled") indien ingesteld, anders valt u terug op de sessieconfiguratie spark.sql.parquet.vorder.default. |
OPTIMIZE met vloeibare clustering
Liquid clustering wordt opgegeven als een tabeloptie; zie Liquid Clustering inschakelen voor meer informatie. Wanneer vloeistofclustering is ingeschakeld, voert OPTIMIZE de fysieke herschrijving uit die het clusteringbeleid toepast.
Belangrijk
Gegevens worden alleen geclusterd wanneer OPTIMIZE wordt uitgevoerd op tabellen met ingeschakelde liquid clustering. Normale schrijfbewerkingen clusteren de gegevens NIET. Het gebruik van een compressiestrategie, zoals het gebruik van automatische compressie of het handmatig plannen van geoptimaliseerde taken, is essentieel om ervoor te zorgen dat de voordelen van geclusterde gegevens (dat wil gezegd, verbeterde overslaan van Delta-bestanden) kunnen worden gerealiseerd.
Snel optimaliseren
Met snelle optimalisatie worden Delta-tabelbestanden snel geanalyseerd en worden compressiebewerkingen overgeslagen die de prestaties waarschijnlijk niet zinvol zullen verbeteren.
In plaats van zonder nadenken bestanden comprimeren wanneer er kleine bestanden zijn, evalueert snelle optimalisatie of elke kandidaat-bin (groep van kleine bestanden) voldoet aan configureerbare best practice-compactiedoelen. Met Fast Optimize wordt alleen compressie uitgevoerd op een bin met bestanden als het samenvoegen ervan waarschijnlijk uw minimale doelgrootte bereikt of als er te veel kleine bestanden zijn. Anders slaat het die groep over of verlaagt het het aantal bestanden dat wordt samengevoegd.
Snelle optimalisatie kan worden afgestemd op basis van uw verdichtingsverwachtingen:
| Vastgoed | Description | Standaardwaarde | Sessieconfiguratie |
|---|---|---|---|
| minNumFiles | Het aantal kleine bestanden dat in een bin moet bestaan om optimalisatie uit te voeren als de bin niet voldoende gegevens bevat die naar schatting een gecomprimeerd bestand opleveren. | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| parquetCoefficient | Vermenigvuldigd met de minimale bestandsgrootte die nodig is voor de optimalisatiecontext om de minimale hoeveelheid kleine bestandsgegevens te bepalen die in een bin moeten bestaan, zodat de bin kan worden opgenomen in het bereik van compactie. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Opmerking
De parquetCoefficient leidt tot een doelgrootte van een bin die groter is dan de minimale doelbestandsgrootte binnen de geoptimaliseerde context. Deze coëfficiënt is verantwoordelijk voor de realiteit dat het combineren van meerdere kleine Parquet-bestanden resulteert in betere compressie en dus minder gegevens dan de som van kleine bestanden. Verhoog de waarde om de snelle optimalisatie conservatiever te maken in hoe vaak bins worden overgeslagen, of verlaag de waarde om het overslaan van bins meer toe te staan.
Hoe het werkt
Snelle optimalisatie introduceert extra controles voordat containers worden gecomprimeerd. Voor elke kandidaat-bin evalueert fast optimize:
- De geschatte hoeveelheid onbewerkte gegevens in de bin (som van kleine bestandsgrootten)
- Of het combineren van de kleine bestanden naar schatting een bestand produceert dat voldoet aan de geconfigureerde minimale doelgrootte
- Of de bin ten minste het geconfigureerde minimum aantal kleine bestanden bevat
Snelle optimalisatie evalueert elke bin met kleine bestanden en voegt alleen de bins samen die waarschijnlijk de minimale doelgrootte bereiken of het minimale aantal bestanden overschrijden. Bins die niet voldoen aan deze drempelwaarden, worden overgeslagen of gedeeltelijk gecomprimeerd. Het overslaan van suboptimale bins vermindert onnodige herschrijven, verlaagt schrijfversterking en maakt OPTIMIZE-taken idempotent.
Opmerking
De exacte implementatie is in de loop van de tijd onderhevig aan ontwikkeling.
Met een snelle optimalisatie kunt u de herschreven gegevens verminderen gedurende de levenscyclus van een Delta-tabel. Zoals in het volgende diagram wordt weergegeven, slaat snel optimaliseren suboptimale bakken over, wat resulteert in snellere en idempotente OPTIMIZE taken met minder write amplification.
Opmerking
Dit is alleen ter illustratie, in de bovenstaande diagrammen wordt verondersteld dat de grootte van het bestand dat is geschreven vanuit compactie, de som is van de grootte van kleine bestanden. Het impliceert ook een parquetCoefficient van 1.
Beperkingen
- Niet van toepassing op liquide clustering en Z-Order-bewerkingen
- Met snelle optimalisatie wordt het gedrag van automatische compressie niet gewijzigd
Compressiedoelen op bestandsniveau
Om te voorkomen dat gegevens die eerder zijn gecomprimeerd (groot genoeg) worden herschreven op basis van het wijzigen van compressieminus- en maximale bestandsgroottedoelen, spark.microsoft.delta.optimize.fileLevelTarget.enabled kunnen worden ingeschakeld om recompaction van al gecomprimeerde bestanden te voorkomen. Wanneer deze functie is ingeschakeld, worden bestanden niet opnieuw gecompacteerd als ze eerder ten minste de helft van de doelbestandsgrootte op het moment van compressie hebben bereikt. Het onderhouden van doelen op bestandsniveau minimaliseert schrijfversterking wanneer de compressiedoelgrootte in de loop van de tijd verandert (bijvoorbeeld van de evaluatie van de adaptieve doelbestandsgrootte en het instellen van een groter doel). Indien ingeschakeld, wordt de OPTIMIZE_TARGET_SIZE tag toegevoegd aan nieuwe bestanden wanneer OPTIMIZE wordt uitgevoerd of voor een schrijfbewerking als de delta.targetFileSize eigenschap of delta.targetFileSize.adaptive tabeleigenschap is ingesteld.
Opmerking
Hoewel deze functie niet standaard is ingeschakeld, raadt Microsoft aan om compressiedoelen op bestandsniveau in te schakelen om mogelijke schrijfversterking te beperken.
Automatische compressie
Automatische compressie evalueert de partitiestatus na elke schrijfbewerking. Wanneer overmatige bestandsfragmentatie (te veel kleine bestanden) binnen een partitie wordt gedetecteerd, wordt er een synchrone OPTIMIZE bewerking geactiveerd direct nadat de schrijfbewerking is doorgevoerd. Deze schrijfgestuurde benadering van bestandsonderhoud is optimaal omdat compressie alleen wordt uitgevoerd wanneer programmatisch wordt bepaald dat het nuttig is.
Inschakelen op sessieniveau
Instellen spark.databricks.delta.autoCompact.enabled op sessieniveau om automatische compressie in te schakelen voor nieuwe tabellen die in die Spark-sessie zijn gemaakt:
Inschakelen op tabelniveau
Stel de tabeleigenschap delta.autoOptimize.autoCompact in om automatische compressie in te schakelen voor specifieke tabellen:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Gebruik de optie delta.autoOptimize.autoCompact DataFrameWriter om automatisch comprimeren in te schakelen bij het maken van een tabel:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Schakel dezelfde tabeleigenschap in voor een bestaande tabel:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Evaluatieoverhead verminderen
Vanaf Fabric Spark Runtime 2.0 (Delta 4.1) kunt u de modus onCheckpointOnly automatisch comprimeren inschakelen. Standaard evalueert automatische compressie bestandsmetagegevens na elke schrijfbewerking om te bepalen of een tabel te veel kleine bestanden heeft. Met onCheckpointOnly wordt de evaluatie uitgesteld tot bewerkingen voor logcontrolepunten (doorgaans elke 10 commits). Op het moment van controlepunt is de momentopname van de tabel al volledig gereconstrueerd, dus de evaluatie leest uit metagegevens die al in het geheugen aanwezig zijn in plaats van dat er een extra scan nodig is. De uitgestelde evaluatie vermindert de overhead per commit, terwijl er nog steeds voor wordt gezorgd dat tabellen periodiek worden gecompacteerd.