Delen via


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, ZORDERof 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.