Sdílet prostřednictvím


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 ZORDERk rozložení dat.

Viz OPTIMALIZACE.

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.