OPTIMIZE

Platí pro:check marked yes Databricks SQL check marked yes 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í clusteringu liquid, provede se optimalizace při balení přihrádky.

Syntaxe

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

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. Cílem je vytvořit rovnoměrně vyvážené datové soubory s ohledem na jejich velikost na disku, ale nemusí nutně počet řazených kolekcí členů na soubor. Tyto dvě míry ale nejčastěji korelují.
  • Pořadí Z-Ordering není idempotentní , ale má být přírůstkovou operací. Doba, po které trvá řazení Z, není zaručeno, že se sníží více spuštění. Pokud se ale do oddílu, který byl jen Z-Order, nepřidali žádná nová data, nebude mít další řazení Z tohoto oddílu žádný vliv. Cílem je vytvořit rovnoměrně vyvážené datové soubory s ohledem na počet řazených kolekcí členů, ale ne nutně velikost dat na disku. Dvě míry jsou nejčastěji korelovány, ale v situacích, kdy tomu tak není, což vede k nerovnoměrné distribuci v době optimalizace úloh.

Poznámka:

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

Parametry

  • Table_name

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

  • WHERE

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

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

  • ZORDER BY

    Shromážděte informace o sloupci ve stejné sadě souborů. Společné umístění používají algoritmy Delta Lake pro přeskakování dat k výraznému snížení množství dat, která je potřeba číst. Jako seznam oddělený čárkami můžete zadat více sloupců ZORDER BY . Efektivita lokality se ale snižuje s každým dalším sloupcem.

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

Příklady

> OPTIMIZE events;

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

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

Další informace o příkazu naleznete v OPTIMIZE tématu Komprimovat datové soubory s optimalizací v Delta Lake.