Sdílet prostřednictvím


OPTIMIZE

Platí pro:označeno zaškrtnutím ano Databricks SQL označeno zaškrtnutím ano Databricks Runtime

Optimalizuje rozložení dat Delta Lake. Volitelně můžete optimalizovat podmnožinu dat nebo kolaciovat data podle sloupce. Pokud nezadáte kolokaci a tabulka není definována pomocí tekutého seskupování, provede se optimalizace uspořádání.

Syntaxe

OPTIMIZE table_name [FULL] [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Poznámka:

  • Bin-packing optimalizace je idempotentní, což znamená, že pokud je spuštěna dvakrát na stejné datové sadě, druhé spuštění nemá žádný vliv. Cílem je vytvořit rovnoměrně vyvážené datové soubory s ohledem na jejich velikost na disku, ale nikoli nutně s ohledem na počet záznamů na soubor. Tyto dvě míry ale nejčastěji korelují.
  • Pořadí Z-Ordering není idempotentní, ale snaží se být přírůstkovou operací. Doba potřebná pro řazení Z není zaručena, že se zkrátí během více spuštění. Pokud se ale do oddílu, který byl právě Z-řazen, nepřidala žádná nová data, nebude mít další Z-řazení tohoto oddílu žádný vliv. Cílem je vytvořit rovnoměrně vyvážené datové soubory s ohledem na počet n-tic, ale ne nutně velikost dat na disku. Dvě míry jsou nejčastěji korelovány, ale mohou nastat situace, kdy tomu tak není, což vede ke zkreslení času optimalizace úloh.

Poznámka:

Při použití Databricks Runtime k řízení velikosti výstupního souboru nastavte konfiguraci Spark. Výchozí hodnota je 1073741824, která nastaví velikost na 1 GB. Zadáním hodnoty 104857600 nastavíte velikost souboru na 100 MB.

Důležité

Při změně kodeku komprese tabulky pomocí delta.parquet.compression.codec vlastnosti se stávající datové soubory automaticky nekomprimují. Pokud chcete rekomprimovat existující data s vybraným formátem komprese, spusťte OPTIMIZE table_name FULL (Databricks Runtime 16.0 a novější):

-- Change compression codec
ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');

-- Recompress all existing data files
OPTIMIZE table_name FULL;

Parametry

  • table_name

    Identifikuje existující tabulku Delta. Název nesmí obsahovat dočasnou specifikaci ani specifikaci možností.

  • FULL

    Platí pro: označeno jako ano Databricks Runtime 16.0 a vyšší

    Přepíše všechny datové soubory v tabulce. Použít OPTIMIZE table_name FULL k:

    • Optimalizujte celou tabulku včetně dat, která mohla být dříve clusterována (pro tabulky využívající liquidní clustering).
    • Překódovat stávající datové soubory, když změníte kompresní kodek tabulky pomocí vlastnosti delta.parquet.compression.codec.
  • WHERE

    Optimalizujte podmnožinu řádků odpovídajících danému oddílovému predikátu. Podporují se pouze filtry zahrnující atributy klíče oddílu.

    Tuto klauzuli nelze použít u tabulek, které používají liquid clustering.

  • ZORDER BY

    Umístěte informace o sloupci ve stejné sadě souborů. Algoritmy Delta Lake pro přeskakování dat využívají společné umístění, aby výrazně snížily množství dat, která je potřeba přečíst. Pro ZORDER BY můžete zadat více sloupců jako seznam oddělený čárkami. Efektivita lokality se ale snižuje s každým dalším sloupcem.

    Tuto klauzuli nelze použít u tabulek, které používají liquid clustering.

Příklady

> OPTIMIZE events;

> OPTIMIZE events FULL;

> OPTIMIZE events WHERE date >= '2017-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Další informace o příkazu OPTIMIZE naleznete v tématu Optimalizace rozložení datového souboru.