Komprimování datových souborů pomocí funkce optimalizovat v Delta Lake

Viz OPTIMALIZACE.

Delta Lake může v Azure Databricks zvýšit rychlost čtení dotazů z tabulky. Jedním ze způsobů, jak tuto rychlost zlepšit, je sloučení malých souborů do větších.

Poznámka:

Databricks Runtime 13.3 a novější doporučuje používat clustering pro rozložení tabulky Delta. Viz Použití liquid clusteringu pro tabulky Delta.

Databricks doporučuje použít prediktivní optimalizaci pro automatické spouštění OPTIMIZE tabulek Delta. Viz Prediktivní optimalizace pro Delta Lake.

Příklady syntaxe

Komprimace se aktivuje spuštěním OPTIMIZE příkazu:

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()

nebo alternativně:

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()

Pokud máte velké množství dat a chcete optimalizovat jenom podmnožinu, můžete zadat volitelný predikát oddílu pomocí 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()

Poznámka:

  • Optimalizace při balení přihrádky je idempotentní, což znamená, že pokud je spuštěna dvakrát ve stejné datové sadě, druhé spuštění nemá žádný vliv.
  • Balení přihrádek má za cíl vytvořit rovnoměrně vyvážené datové soubory s ohledem na jejich velikost na disku, ale ne nutně počet řazených kolekcí členů na soubor. Tyto dvě míry ale nejčastěji korelují.
  • Rozhraní PYTHON a Scala API pro provádění OPTIMIZE operací jsou k dispozici z Databricks Runtime 11.3 LTS a vyšší.

Čtenáři tabulek Delta používají izolaci snímků, což znamená, že nejsou přerušeny při OPTIMIZE odebrání nepotřebných souborů z transakčního protokolu. OPTIMIZE neprovádí žádné změny související s tabulkou, takže čtení před a po OPTIMIZE provedení má stejné výsledky. Provádění OPTIMIZE s tabulkou, která je zdrojem streamování, nemá vliv na aktuální ani budoucí datové proudy, které tuto tabulku považují za zdroj. OPTIMIZE vrátí statistiku souboru (min, maximum, součet atd.) pro odebrané soubory a soubory přidané operací. Statistiky optimalizace obsahují také statistiky řazení Z, počet dávek a optimalizované oddíly.

Malé soubory můžete také automaticky komprimovat pomocí automatického komprimace. Viz Automatické komprimace pro Delta Lake v Azure Databricks.

Jak často mám běžet OPTIMIZE?

Když zvolíte, jak často se má běžet OPTIMIZE, je mezi výkonem a náklady kompromis. Pokud chcete dosáhnout lepšího výkonu dotazů koncových uživatelů, spusťte OPTIMIZE častěji. Z důvodu zvýšeného využití prostředků to bude zvyšovat náklady. Pokud chcete optimalizovat náklady, spusťte ho méně často.

Databricks doporučuje, abyste začali spouštět OPTIMIZE každý den a pak upravte frekvenci, aby se vyrovnály kompromisy mezi náklady a výkonem.

Jaký je nejlepší typ instance pro spuštění OPTIMIZE (při balení přihrádky a řazení Z)?

Obě operace jsou operace náročné na procesor, které provádějí velké množství dekódování a kódování Parquet.

Databricks doporučuje typy instancí optimalizovaných pro výpočty. OPTIMIZE také výhody připojených disků SSD.