Delen via


Indeling van gegevensbestand optimaliseren

Voorspellende optimalisatie wordt automatisch uitgevoerd OPTIMIZE op beheerde tabellen van Unity Catalog. Databricks raadt aan voorspellende optimalisatie in te schakelen voor alle beheerde tabellen in Unity Catalog om het onderhoud van gegevens te vereenvoudigen en de opslagkosten te verlagen. Zie Voorspellende optimalisatie voor beheerde tabellen in Unity Catalog.

Met de OPTIMIZE opdracht worden gegevensbestanden herschreven om de gegevensindeling voor Delta-tabellen te verbeteren. Voor tabellen waarvoor liquide clustering is ingeschakeld, OPTIMIZE herschrijft u gegevensbestanden om gegevens te groeperen door liquide clusteringsleutels. Voor tabellen met gedefinieerde partities worden bestandscompressie en gegevensindeling uitgevoerd binnen partities.

Tabellen zonder liquide clustering kunnen 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.

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 ervan wilt optimaliseren, kunt u een optioneel partitiepredicaat 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-tabellen maken gebruik van isolatie van momentopnamen, wat betekent dat ze niet worden onderbroken wanneer OPTIMIZE onnodige bestanden uit het transactielogboek worden verwijderd. OPTIMIZE brengt geen gegevens gerelateerde wijzigingen aan de tabel aan, dus een leesbewerking voor en nadat een OPTIMIZE tabel dezelfde resultaten heeft. Het uitvoeren OPTIMIZE van een tabel die een streamingbron is, heeft geen invloed op huidige of toekomstige streams die deze tabel 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. Statistieken optimaliseren bevat ook de Z-Ordering-statistieken, het aantal batches en partities geoptimaliseerd.

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 beheerde tabellen in Unity Catalog om ervoor te zorgen dat deze OPTIMIZE automatisch worden uitgevoerd wanneer deze rendabel zijn.

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. Voer de kosten minder vaak uit om de kosten te optimaliseren.

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.