Optimalizace rozložení datového souboru

Příkaz OPTIMIZE přepíše datové soubory, aby se zlepšilo rozložení dat pro tabulky Delta Lake i Apache Iceberg. Pro tabulky s povoleným seskupováním pomocí liquid clusteringu, OPTIMIZE přepisuje datové soubory, aby seskupily data podle klíčů liquid clusteringu. Pro tabulky s definovanými oddíly se v rámci oddílů provádí komprimace souborů a rozložení dat.

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í optimalizaci pro spravované tabulky v katalogu Unity .

Tabulky Delta Lake bez liquid clusteringu mohou volitelně obsahovat klauzuli ZORDER BY pro zlepšení clusteringu dat při přepisu. Tabulky Apache Iceberg používají seskupování a strategie třídění místo ZORDER. Databricks doporučuje používat liquid clustering místo oddílů, ZORDER nebo jiných přístupů k rozložení dat.

Viz OPTIMIZE.

Important

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 Nucené opětovné seskupení.

Příklady syntaxe

Spuštěním OPTIMIZE příkazu aktivujte komprimace:

SQL

OPTIMIZE table_name

Python

Rozhraní Python DeltaTable API je specifické pro Delta Lake.

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

Scala

Rozhraní SCALA DeltaTable API je specifické pro Delta Lake.

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()

Pokud máte velké množství dat a chcete jenom optimalizovat podmnožinu, zadejte volitelný predikát oddílu pomocí WHERE:

SQL

OPTIMIZE table_name WHERE date >= '2022-11-18'

Python

Rozhraní Python DeltaTable API je specifické pro Delta Lake.

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

Scala

Rozhraní SCALA DeltaTable API je specifické pro Delta Lake.

import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()

Zvažte následující informace pro balení přihrádek:

  • Optimalizace balicích binů je idempotentní, což znamená, že pokud je spuštěna dvakrát na stejné datové sadě, druhé spuštění nemá žádný vliv.
  • Bin-packing má za cíl vytvářet rovnoměrně vyvážené datové soubory s ohledem na jejich velikost v úložišti, nikoli však nutně podle počtu n-tic v každém souboru. Obě míry jsou ale často korelovány.

Čtenáři tabulek Delta Lake používají izolaci snímku, což znamená, že nejsou přerušeni, když OPTIMIZE odstraňuje nepotřebné soubory z transakčního protokolu. Protože OPTIMIZE nemění žádná data v tabulce, čtení před OPTIMIZE i po něm má stejné výsledky. Provedení operace OPTIMIZE u tabulky, která je zdrojem datového proudu, nemá vliv na žádné stávající ani budoucí datové proudy, které tuto tabulku používají jako zdroj.

OPTIMIZE vrátí statistiku souboru (min, maximum, součet atd.) pro odebrané soubory a soubory přidané operací. Statistiky optimalizace také obsahují statistiky Z-Orderingu, počet dávek a optimalizované části.

Malé soubory můžete také automaticky komprimovat pomocí automatického komprimace. Viz Automatické komprimace.

Povolte prediktivní optimalizaci spravovaných tabulek Katalogu Unity, abyste zajistili, že OPTIMIZE se automaticky spustí, když je nákladově efektivní.

Když zvolíte frekvenci spuštění 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.

Obě operace jsou výpočetně náročné a zahrnují velké množství dekódování a kódování dat ve formátu Parquet.

Databricks doporučuje typy instancí optimalizovaných pro výpočty. OPTIMIZE také využívá připojené disky SSD.