indeling van gegevensbestanden Optimize
Voorspellende optimalisatie wordt automatisch uitgevoerd OPTIMIZE
op Unity Catalog beheerde tables. Databricks raadt aan voorspellende optimalisatie in te schakelen voor alle door Unity Catalog beheerde tables om het onderhoud van gegevens te vereenvoudigen en de opslagkosten te verlagen. Zie Predictive Optimization voor Unity Catalog beheerde tables.
Met de opdracht OPTIMIZE
worden gegevensbestanden herschreven om de gegevensindeling voor Delta tableste verbeteren. Voor tables waarvoor liquide clustering is ingeschakeld, herschrijft OPTIMIZE
gegevensbestanden om gegevens te groeperen met behulp van liquide clusteringsleutels. Voor tables waarbij partities zijn gedefinieerd, worden bestandscompressie en gegevensindeling uitgevoerd binnen partities.
Tables zonder liquide clustering kan eventueel een ZORDER BY
component bevatten om gegevensclustering te verbeteren bij herschrijven. Databricks raadt het gebruik van liquide clustering aan in plaats van partities, ZORDER
of andere benaderingen voor gegevensindeling.
Zie OPTIMIZE.
Belangrijk
In Databricks Runtime 16.0 en hoger kunt u OPTIMIZE FULL
gebruiken om reclustering af te dwingen voor tables waarvoor liquide clustering is ingeschakeld. Zie dwangherclustering voor alle records.
Voorbeelden van syntaxis
U activeert compressie door de opdracht uit te OPTIMIZE
voeren:
SQL
OPTIMIZE table_name
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Als u een grote hoeveelheid gegevens hebt en alleen een subset wilt optimize, kunt u een optioneel partition predicaat opgeven met behulp van WHERE
:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Notitie
- Optimalisatie van bin-verpakking is idempotent, wat betekent dat als deze twee keer op dezelfde gegevensset wordt uitgevoerd, de tweede uitvoering geen effect heeft.
- Bin-packing streeft ernaar om gelijkmatig verdeelde gegevensbestanden te produceren met betrekking tot hun grootte op schijf, maar niet noodzakelijkerwijs het aantal tuples per bestand. De twee metingen worden echter het vaakst gecorreleerd.
- Python- en Scala-API's voor het uitvoeren van
OPTIMIZE
bewerkingen zijn beschikbaar via Databricks Runtime 11.3 LTS en hoger.
Lezers van Delta tables gebruikmaken van isolatie van momentopnamen, wat betekent dat ze niet worden onderbroken wanneer OPTIMIZE
overbodige bestanden uit het transactielogboek verwijdert.
OPTIMIZE
geen gegevenswijzigingen aanbrengt in de table, zodat een leesbewerking vóór en na een OPTIMIZE
dezelfde resultaten heeft. Het uitvoeren van OPTIMIZE
op een table die een streamingbron is, heeft geen invloed op huidige of toekomstige streams die deze table behandelen als bron.
OPTIMIZE
retourneert de bestandsstatistieken (min, max, totaal, enzovoort) voor de bestanden die zijn verwijderd en de bestanden die door de bewerking zijn toegevoegd.
Optimize-statistieken bevatten ook de Z-Ordering-statistieken, het aantal batches, en de geoptimaliseerde partities.
U kunt ook kleine bestanden automatisch comprimeren met automatische compressie. Zie Automatische compressie voor Delta Lake in Azure Databricks.
Hoe vaak moet ik rennen OPTIMIZE
?
Schakel voorspellende optimalisatie in voor Unity Catalog beheerde tables om ervoor te zorgen dat OPTIMIZE
automatisch wordt uitgevoerd wanneer deze rendabel is.
Wanneer u kiest hoe vaak u wilt uitvoeren OPTIMIZE
, is er een afweging tussen prestaties en kosten. Voor betere prestaties van query's van eindgebruikers voert u vaker uit OPTIMIZE
. Hierdoor worden hogere kosten in rekening gebracht vanwege het toegenomen resourcegebruik. Om optimize kosten te besparen, gebruik het minder vaak.
Databricks raadt u aan om dagelijks te beginnen OPTIMIZE
en vervolgens de frequentie aan te passen om kosten- en prestatieafsplitsingen te verdelen.
Wat is het beste exemplaartype om uit te voeren OPTIMIZE
(bin-packing en Z-Ordering) op?
Beide bewerkingen zijn CPU-intensieve bewerkingen die grote hoeveelheden Parquet-decodering en -codering uitvoeren.
Databricks raadt geoptimaliseerde exemplaartypen voor Compute aan.
OPTIMIZE
profiteert ook van gekoppelde HD's.