OPTIMIZE
Platí pro: Databricks SQL 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 konfiguraci spark.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
-
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 tématu Optimalizace rozložení datového OPTIMIZE
souboru.