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.
Net als bestandssystemen en relationele databases worden gegevens na verloop van tijd gefragmenteerd, tenzij ze nauw worden beheerd, wat leidt tot overmatige rekenkosten om de gegevens te lezen. Delta Lake is geen uitzondering. Gegevensbestanden moeten periodiek worden herschreven in een optimale indeling om de kosten voor afzonderlijke bestandsbewerkingen te verminderen, gegevenscompressie te verbeteren en de parallelle uitvoering van lezers te optimaliseren. Met OPTIMIZE de opdracht wordt deze uitdaging opgelost: het groepeert kleine bestanden binnen een partitie in bins die gericht zijn op een ideale bestandsgrootte en herschrijft ze naar de opslag. Het resultaat is dezelfde gegevens die in minder bestanden zijn gecomprimeerd.
Compressiemethoden
Microsoft Fabric biedt verschillende methoden 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 g) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Doelbestandsgrootte geproduceerd door de OPTIMIZE opdracht. |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
Belangrijk
Hoewel OPTIMIZE een idempotente bewerking betreft (wat betekent dat het tweemaal achter elkaar uitvoeren geen gegevens herschrijft), kan het gebruik van een minFileSize dat te groot is ten opzichte van de Delta-tabelgrootte leiden tot schrijfversterking, waardoor de bewerking meer rekenkracht vereist dan nodig is. Als uw minFileSize is ingesteld op 1 GB en u een bestand van 900 MB in uw tabel hebt, wordt het redelijk grote 900-MB-bestand herschreven wanneer OPTIMIZE wordt uitgevoerd, nadat een klein bestand van 1 KB naar uw tabel is geschreven. Zie de documentatie voor richtlijnen over adaptieve doelbestandsomvang voor het automatisch beheren van bestandsgrootte.
OPTIMIZE met Z-Order
Wanneer de ZORDER BY component is opgegeven, OPTIMIZE worden alle actieve bestanden herschreven, zodat rijen met vergelijkbare waarden voor de z-orderkolommen in dezelfde bestanden worden geplaatst, waardoor de effectiviteit van het overslaan van bestanden wordt verbeterd voor query's die op deze kolommen filteren. 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
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. Deze waarde kan worden verhoogd om conservatiever te zijn in hoe vaak snelle optimalisatie vakjes overslaat of verlaagd om meer permissief vakjes overslaan mogelijk te maken.
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
Met een snelle optimalisatie wordt elke bin met kleine bestanden geëvalueerd en worden alleen de kleine bestanden gecomprimeerd 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.
Snel optimaliseren kan ertoe leiden dat er minder gegevens worden herschreven tijdens de levenscyclus van Delta-tabellen. Zoals geïllustreerd in het volgende diagram, wordt snel het comprimeren van suboptimale compartimenten overgeslagen. Het nettoresultaat is snellere en meer idempotente OPTIMIZE taken en minder schrijf-amplificatie.
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 na verloop van tijd verandert (voor exmaple, van de evaluatie van de grootte van adaptieve doelbestanden 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.
Instellen op sessieniveau om automatische compressie in te schakelen voor nieuwe tabellen:
Instellen op tabelniveau om alleen in te schakelen voor geselecteerde tabellen:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Gebruik de optie DataFrameWriter om nieuwe tabellen in te schakelen:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Inschakelen voor bestaande tabellen:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Het gedrag van automatische compressie kan worden afgestemd via de volgende Spark-sessieconfiguraties:
| Vastgoed | Description | Standaardwaarde | Sessieconfiguratie |
|---|---|---|---|
| maxFileSize | De maximale bestandsgrootte in bytes voor gecompacteerde bestanden. | 134217728b (128 MB) | spark.databricks.delta.autoCompact.maxFileSize |
| minFileSize | De minimale bestandsgrootte in bytes voor een bestand dat moet worden beschouwd als gecomprimeerd. Alles onder deze drempelwaarde wordt overwogen voor compressie en wordt meegeteld bij de minNumFiles drempelwaarde. |
Standaard wordt deze waarde niet ingesteld, berekend als 1/2 van de maxFileSize waarde, tenzij u expliciet een waarde instelt. |
spark.databricks.delta.autoCompact.minFileSize |
| minNumFiles | Het minimale aantal bestanden dat moet bestaan onder de minFileSize drempelwaarde voor automatisch comprimeren om te worden geactiveerd. |
50 | spark.databricks.delta.autoCompact.minNumFiles |
Opmerking
Microsoft raadt aan om automatisch comprimeren te gebruiken in plaats van taken te plannen OPTIMIZE . Automatische compressie presteert over het algemeen beter dan geplande compressietaken bij het maximaliseren van lees-/schrijfprestaties en elimineert vaak de onderhoudsoverhead van coderen, plannen en optimaliseren van de frequentie van het uitvoeren van geplande taken. Automatische compressie wordt aanbevolen wanneer de serviceniveaudoelstellingen voor gegevensverwerking de toegevoegde latentie van automatische compressie tolereren wanneer compressie nodig is. Als de vereisten voor gegevenslatentie strikt zijn, is het mogelijk effectiever om de optimalisatie te plannen voor uitvoering in een afzonderlijke Spark-pool, zodat schrijfbewerkingen geen periodieke pieken zien vanwege de synchrone compressiebewerkingen die worden geactiveerd.
Belangrijk
Hoewel compressie een kritieke strategie is om te gebruiken, moet deze ook op de juiste manier worden gekoppeld aan het vermijden van het schrijven van kleine bestanden via functies zoals het optimaliseren van schrijfbewerkingen. Zie de richtlijnen voor het optimaliseren van schrijfbewerkingen voor meer informatie.
Onderhoud van Lakehouse-tabellen
Gebruikers kunnen ad-hoc onderhoudsbewerkingen uitvoeren, zoals OPTIMIZE vanuit de Gebruikersinterface van Lakehouse. Zie Onderhoud van Lakehouse-tabellen voor meer informatie.
Samenvatting van aanbevolen procedures
-
Schakel Automatisch comprimeren in voor opnamepijplijnen met frequente kleine schrijfbewerkingen (streaming of microbatch) om handmatige planning te voorkomen en bestanden automatisch gecomprimeerd te houden.
- Voor andere schrijfpatronen kan het nuttig zijn om in te schakelen als verzekering tegen het accumuleren van kleine bestanden, maar afwegen of uw serviceniveaudoelstellingen voor gegevensverwerking periodieke pieken in de verwerkingstijd tolereren.
- Plan bewerkingen in de volledige tabel
OPTIMIZEtijdens stille vensters wanneer u veel partities moet herschrijven of Z-Order moet uitvoeren. - Schakel snel optimaliseren in om schrijfversterking te verminderen en om
OPTIMIZEmeer idempotent te maken. - Schakel compressiedoelen op bestandsniveau in om schrijfversterking te voorkomen wanneer tabellen groter worden en grotere doelbestandsgrootten gebruiken.
- Houd er rekening mee dat prewrite-compactie (optimize write) goedkoper is dan post-write-compactie (optimaliseren). Zie de optimize write-documentatie voor best practices.
Verwante inhoud
- Bestandsgrootte afstemmen
- Lakehouse-tabelonderhoud
- Wat is Delta Lake?