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 [FULL] [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 ani specifikaci možností.
FULL
Platí pro: Databricks Runtime 16.0 a novější
Optimalizujte celou tabulku včetně dat, která byla dříve seskupována. Tuto klauzuli lze zadat pouze pro tabulky, které používají clustering liquid.
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;
> OPTIMZIE 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 naleznete v tématu Optimalizace rozložení datového OPTIMIZE
souboru.