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.