Optimalizace rozložení datového souboru
Prediktivní optimalizace se automaticky spouští OPTIMIZE
ve spravovaných tabulkách katalogu Unity. Databricks doporučuje povolit prediktivní optimalizaci pro všechny spravované tabulky Katalogu Unity, aby se zjednodušila údržba dat a snížily náklady na úložiště. Viz Prediktivní optimalizace spravovaných tabulek v katalogu Unity.
Příkaz OPTIMIZE
přepíše datové soubory, aby se zlepšilo rozložení dat pro tabulky Delta. U tabulek s povoleným OPTIMIZE
clusteringem liquid přepíše datové soubory, aby seskupily data pomocí klíčů clusteringu liquid. Pro tabulky s definovanými oddíly se v rámci oddílů provádí komprimace souborů a rozložení dat.
Tabulky bez clusteringu liquid můžou volitelně obsahovat ZORDER BY
klauzuli pro zlepšení clusteringu dat při přepsání. Databricks doporučuje místo oddílů používat clustering liquid nebo jiné přístupy ZORDER
k rozložení dat.
Viz OPTIMIZE.
Důležitý
V Databricks Runtime 16.0 a novějších můžete pomocí OPTIMIZE FULL
vynutit nové seskupení pro tabulky s povoleným liquid clusteringem. Viz Vynucení přeuspořádání pro všechny záznamy.
Příklady syntaxe
Komprimace se aktivuje spuštěním OPTIMIZE
příkazu:
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()
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 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()
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
?
Povolte prediktivní optimalizaci spravovaných tabulek Katalogu Unity, abyste zajistili, že OPTIMIZE
se automaticky spustí, když je nákladově efektivní.
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.