Delen via


Delta Lake configureren voor het beheren van de bestandsgrootte

Notitie

De aanbevelingen in dit artikel zijn niet van toepassing op door Unity Catalog beheerde tables. Databricks raadt aan Unity Catalog beheer tables te gebruiken met standaardinstellingen voor alle nieuwe Delta tables.

In Databricks Runtime 13.3 en hoger raadt Databricks aan om clustering te gebruiken voor Delta table indeling. Zie Liquid Clustering gebruiken voor Delta tables.

Databricks raadt aan voorspellende optimalisatie te gebruiken om automatisch OPTIMIZE en VACUUM uit te voeren voor Delta tables. Zie Predictive Optimization voor Unity Catalog beheerde tables.

In Databricks Runtime 10.4 LTS en hoger zijn automatisch comprimeren en geoptimaliseerde schrijfbewerkingen altijd ingeschakeld voor MERGE, UPDATEen DELETE bewerkingen. U kunt deze functionaliteit niet uitschakelen.

Delta Lake biedt opties voor het handmatig of automatisch configureren van de doelbestandsgrootte voor schrijfbewerkingen en voor OPTIMIZE bewerkingen. Azure Databricks tunest automatisch veel van deze instellingen en maakt functies mogelijk die automatisch table prestaties verbeteren door te zoeken naar bestanden met de juiste grootte.

Voor Unity Catalog beheerde tablesworden de meeste van deze configuraties automatisch door Databricks afgesteld als u een SQL-warehouse of Databricks Runtime 11.3 LTS of hoger gebruikt.

Als u een workload bijwerkt vanuit Databricks Runtime 10.4 LTS of lager, raadpleegt u Upgraden naar automatische compressie op de achtergrond.

Wanneer moet worden uitgevoerd OPTIMIZE

Automatische compressie en geoptimaliseerde schrijfbewerkingen verminderen elk kleine bestandsproblemen, maar zijn geen volledige vervanging voor OPTIMIZE. Met name voor tables groter dan 1 TB raadt Databricks aan om OPTIMIZE volgens een schema uit te voeren om bestanden verder samen te voegen. Azure Databricks voert niet automatisch ZORDER uit op tables, dus u moet OPTIMIZE uitvoeren met ZORDER om verbeterde gegevensoverslaan in te schakelen. Zie Gegevens overslaan voor Delta Lake.

Wat is automatisch optimize in Azure Databricks?

De term automatische optimize wordt soms gebruikt om de functionaliteit te beschrijven die wordt beheerd door de instellingen delta.autoOptimize.autoCompact en delta.autoOptimize.optimizeWrite. Deze term is buiten gebruik gesteld ten gunste van het afzonderlijk beschrijven van elke instelling. Zie Automatische compressie voor Delta Lake in Azure Databricks en geoptimaliseerde schrijfbewerkingen voor Delta Lake in Azure Databricks.

Automatische compressie voor Delta Lake in Azure Databricks

Automatische compressie combineert kleine bestanden in Delta table partities om kleine bestandsproblemen automatisch te verminderen. Automatische compressie vindt plaats nadat een schrijfbewerking naar een table is geslaagd en synchroon wordt uitgevoerd op het cluster dat de schrijfbewerking heeft uitgevoerd. Met automatisch comprimeren worden alleen bestanden gecomprimeerd die nog niet eerder zijn gecomprimeerd.

U kunt de grootte van het uitvoerbestand beheren door de Spark-configuratiespark.databricks.delta.autoCompact.maxFileSizein te stellen. Databricks raadt aan gebruik te maken van autotuning op basis van werkbelasting of table grootte. Zie Autotune-bestandsgrootte op basis van workload en Autotune-bestandsgrootte op basis van table grootte.

Automatische compressie wordt alleen geactiveerd voor partities of tables met ten minste een bepaald aantal kleine bestanden. U kunt desgewenst het minimale aantal bestanden wijzigen dat nodig is om automatische compressie te activeren door de instelling in te stellen spark.databricks.delta.autoCompact.minNumFiles.

Automatische compressie kan worden ingeschakeld op table of sessieniveau met behulp van de volgende instellingen:

  • eigenschappen Table: delta.autoOptimize.autoCompact
  • SparkSession-instelling: spark.databricks.delta.autoCompact.enabled

Deze instellingen accepteren de volgende opties:

Opties Gedrag
auto (aanbevolen) Tunes doelbestandsgrootte terwijl andere functionaliteit voor automatisch afstemmen wordt gerespecteerd. Vereist Databricks Runtime 10.4 LTS of hoger.
legacy Alias voor true. Vereist Databricks Runtime 10.4 LTS of hoger.
true Gebruik 128 MB als doelbestandsgrootte. Geen dynamische grootte.
false Hiermee schakelt u automatische compressie uit. Kan op sessieniveau worden ingesteld als set om automatische compactie ongedaan te maken voor alle Delta-tables die zijn gewijzigd in de workload.

Belangrijk

In Databricks Runtime 9.1 LTS kan automatische compressie ertoe leiden dat andere schrijvers bewerkingen uitvoeren, zoals DELETE, MERGE, UPDATEof OPTIMIZE gelijktijdig, dat deze andere taken mislukken met een transactieconflict. Dit is geen probleem in Databricks Runtime 10.4 LTS en hoger.

Geoptimaliseerde schrijfbewerkingen voor Delta Lake in Azure Databricks

Geoptimaliseerde schrijfbewerkingen verbeteren de bestandsgrootte wanneer gegevens worden geschreven en profiteren van latere leesbewerkingen op de table.

Geoptimaliseerde schrijfbewerkingen zijn het meest effectief voor gepartitioneerde tables, omdat ze het aantal kleine bestanden verminderen dat naar elke partitionwordt geschreven. Het schrijven van minder grote bestanden is efficiënter dan het schrijven van veel kleine bestanden, maar u ziet mogelijk nog steeds een toename van de schrijflatentie omdat de gegevens in willekeurige volgorde worden geschoven voordat ze worden geschreven.

In de volgende afbeelding ziet u hoe geoptimaliseerde schrijfbewerkingen werken:

Geoptimaliseerde schrijfbewerkingen

Notitie

Mogelijk hebt u code die wordt uitgevoerd coalesce(n) of repartition(n) net voordat u uw gegevens opschrijft om het aantal geschreven bestanden te bepalen. Met geoptimaliseerde schrijfbewerkingen hoeft u dit patroon niet meer te gebruiken.

Geoptimaliseerde schrijfbewerkingen zijn standaard ingeschakeld voor de volgende bewerkingen in Databricks Runtime 9.1 LTS en hoger:

  • MERGE
  • UPDATE met subquery's
  • DELETE met subquery's

Geoptimaliseerde schrijfbewerkingen worden ook ingeschakeld voor CTAS instructies en INSERT bewerkingen bij het gebruik van SQL Warehouses. In Databricks Runtime 13.3 LTS en hoger hebben alle in Unity Catalog geregistreerde Delta-tables geoptimaliseerd schrijven ingeschakeld voor CTAS instructies en INSERT bewerkingen op gepartitioneerde tables.

Geoptimaliseerde schrijfbewerkingen kunnen worden ingeschakeld op table of sessieniveau met behulp van de volgende instellingen:

  • Table instelling: delta.autoOptimize.optimizeWrite
  • SparkSession-instelling: spark.databricks.delta.optimizeWrite.enabled

Deze instellingen accepteren de volgende opties:

Opties Gedrag
true Gebruik 128 MB als doelbestandsgrootte.
false Hiermee schakelt u geoptimaliseerde schrijfbewerkingen uit. Kan op sessieniveau worden ingesteld als set om automatische compressie te overschrijven voor alle Delta-tables's die in de workload zijn gewijzigd.

een doelbestandsgrootte Set

Als u de grootte van bestanden in uw Delta-tablewilt afstemmen, set u de eigenschap tabledelta.targetFileSize naar de gewenste grootte. Als deze eigenschap setis, zullen alle optimalisatiebewerkingen voor gegevensindelingen hun best doen om bestanden van de opgegeven grootte te generate. Voorbeelden hiervan zijn optimize of Z-order, automatische compressieen geoptimaliseerde schrijfbewerkingen.

Notitie

Wanneer u Unity Catalog-beheerde tables en SQL-warehouses of Databricks Runtime 11.3 LTS en hoger gebruikt, voldoen alleen OPTIMIZE-opdrachten aan de targetFileSize-instelling.

eigenschap Table
delta.targetFileSize

Type: Grootte in bytes of hogere eenheden.

De grootte van het doelbestand. Bijvoorbeeld 104857600 (bytes) of 100mb.

Standaardwaarde: Geen

Voor bestaande tableskunt u eigenschappen set instellen en verwijderen met behulp van de SQL-opdracht ALTER TABLESET TBL PROPERTIES. U kunt deze eigenschappen ook automatisch set bij het maken van nieuwe tables met behulp van Spark-sessieconfiguraties. Zie Delta table eigenschappenreferentie voor details.

Bestandsgrootte automatisch afstemmen op basis van workload

Databricks raadt aan om de eigenschap table in te stellen delta.tuneFileSizesForRewrites op true voor alle tables waarop veel MERGE- of DML-bewerkingen betrekking hebben, ongeacht Databricks Runtime, Unity Catalogof andere optimalisaties. Wanneer set naar true, wordt de doelbestandsgrootte voor de tableset tot een veel lagere drempelwaarde, waardoor schrijfintensieve bewerkingen worden versneld.

Als Azure Databricks niet expliciet set, detecteert het automatisch of 9 van de laatste 10 vorige bewerkingen op een Delta-tableMERGE-bewerkingen zijn en stelt het deze table-eigenschap in op true. U moet deze eigenschap expliciet set naar false instellen om dit gedrag te voorkomen.

eigenschap Table
delta.tuneFileSizesForRewrites

Type: Boolean

Of u de bestandsgrootten wilt afstemmen voor optimalisatie van de gegevensindeling.

Standaardwaarde: Geen

Voor bestaande tableskunt u eigenschappen set en wissen met behulp van de SQL-opdracht ALTER TABLESET TBL PROPERTIES. U kunt deze eigenschappen ook automatisch set bij het maken van nieuwe tables met behulp van Spark-sessieconfiguraties. Zie Eigenschappen van Delta table voor meer informatie.

bestandsgrootte automatisch afstemmen op basis van table grootte

Om de noodzaak van handmatig afstemmen te minimaliseren, wordt in Azure Databricks automatisch de bestandsgrootte van Delta tables afstemmen op basis van de grootte van de table. Azure Databricks gebruikt kleinere bestandsgrootten voor kleinere tables en grotere bestandsgrootten voor grotere tables, zodat het aantal bestanden in de table niet te groot wordt. Azure Databricks kan tables die u hebt afgestemd op een specifieke doelgrootte niet automatisch afstemmen of op basis van een workload met frequente herschrijffouten.

De doelbestandsgrootte is gebaseerd op de huidige grootte van de Delta-table. Voor tables kleiner dan 2,56 TB is de automatisch afgestemde doelbestandsgrootte 256 MB. Voor tables met een grootte tussen 2,56 TB en 10 TB groeit de doelgrootte lineair van 256 MB tot 1 GB. Voor tables groter dan 10 TB is de grootte van het doelbestand 1 GB.

Notitie

Wanneer de doelbestandsgrootte voor een table groeit, worden bestaande bestanden niet opnieuw geoptimaliseerd in grotere bestanden met de opdracht OPTIMIZE. Een grote table kan daarom altijd een aantal bestanden hebben die kleiner zijn dan de doelgrootte. Als u deze kleinere bestanden ook in grotere bestanden wilt optimize, kunt u een vaste doelbestandsgrootte voor de table configureren met behulp van de eigenschap delta.targetFileSizetable.

Wanneer een table incrementeel wordt geschreven, liggen de grootte van het doelbestand en het aantal bestanden dicht bij de volgende getallen, op basis van table grootte. De aantallen bestanden in deze table zijn slechts een voorbeeld. De werkelijke resultaten verschillen, afhankelijk van veel factoren.

Table grootte Grootte van doelbestand Geschat aantal bestanden in table
10 GB 256 MB 40
1 TB 256 MB 4096
2,56 TB 256 MB 10240
3 TB 307 MB 12108
5 TB 512 MB 17339
7 TB 716 MB 20784
10 TB 1 GB 24437
20 TB 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Limit rijen geschreven in een gegevensbestand

Af en toe kan tables met smalle gegevens een fout tegenkomen where het aantal rijen in een bepaald gegevensbestand de ondersteuningslimieten van de Parquet-indeling overschrijdt. Om deze fout te voorkomen, kunt u de configuratie van de SQL-sessie gebruiken spark.sql.files.maxRecordsPerFile om het maximum aantal records op te geven dat naar één bestand moet worden geschreven voor een Delta Lake-table. Het opgeven van een waarde van nul of een negatieve waarde vertegenwoordigt geen limit.

In Databricks Runtime 11.3 LTS en hoger kunt u ook de optie DataFrameWriter gebruiken maxRecordsPerFile wanneer u de DataFrame-API's gebruikt om naar een Delta Lake-tablete schrijven. Wanneer maxRecordsPerFile dit is opgegeven, wordt de waarde van de CONFIGURATIE spark.sql.files.maxRecordsPerFile van de SQL-sessie genegeerd.

Notitie

Databricks raadt het gebruik van deze optie niet aan, tenzij het nodig is om de bovengenoemde fout te voorkomen. Deze instelling is mogelijk nog steeds nodig voor sommige Unity Catalog beheerde tables met zeer smalle gegevens.

Upgraden naar automatische compressie op de achtergrond

Automatische compressie op de achtergrond is beschikbaar voor Unity Catalog beheerde tables in Databricks Runtime 11.3 LTS en hoger. Wanneer u een verouderde workload of tablemigreert, gaat u als volgt te werk:

  • Remove de Spark-configuratie spark.databricks.delta.autoCompact.enabled vanuit de instellingen voor cluster- of notebookconfiguratie.
  • Voer voor elke tablede verouderde automatische compressie-instellingen van ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) tot remove uit.

Nadat u deze verouderde configuraties hebt verwijderd, ziet u dat automatische compressie op de achtergrond automatisch wordt geactiveerd voor alle Unity-Catalog beheerde tables.