Gegevensbestanden comprimeren met Optimize in Delta Lake

Zie OPTIMIZE.

Delta Lake in Azure Databricks kan de snelheid van het lezen van query's uit een tabel verbeteren. Een manier om deze snelheid te verbeteren, is door kleine bestanden samen te voegen in grotere bestanden.

Notitie

In Databricks Runtime 13.3 en hoger raadt Databricks aan om clustering te gebruiken voor de indeling van deltatabellen. Zie Liquid clustering gebruiken voor Delta-tabellen.

Databricks raadt aan om voorspellende optimalisatie te gebruiken om automatisch te worden uitgevoerd OPTIMIZE voor Delta-tabellen. Zie Voorspellende optimalisatie voor Delta Lake.

Voorbeelden van syntaxis

U activeert compressie door de opdracht uit te OPTIMIZE voeren:

SQL

OPTIMIZE delta.`/data/events`

Python

from delta.tables import *
deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forPath(spark, "/data/events")
deltaTable.optimize().executeCompaction()

of, als alternatief:

SQL

OPTIMIZE events

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
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 events WHERE date >= '2022-11-18'

Python

from delta.tables import *
deltaTable = DeltaTable.forName(spark, "events")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Scala

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "events")
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?

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.