OPTIMIZE

Dotyczy:zaznaczone jako tak Databricks SQL zaznaczone jako tak Databricks Runtime

OPTIMIZE optymalizacja układu danych w tabelach Delta Lake oraz zarządzanych tabelach Apache Iceberg. Możesz zoptymalizować podzbiór danych lub postawić dane według kolumny. Jeśli nie określisz kolokacji, a tabela nie używa klastrowania płynnego, usługa Delta Lake wykonuje optymalizację pakowania bin-packing.

Składnia

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

Uwaga

Optymalizacja pakowania bin jest idempotentna: jeśli uruchamiasz go dwa razy w tym samym zestawie danych, drugi przebieg nie ma wpływu. Tworzy równomiernie zrównoważone pliki danych w odniesieniu do ich rozmiaru na dysku, ale niekoniecznie liczby krotki na plik. Te dwie miary są najczęściej skorelowane.

Porządkowanie Z nie jest idempotentne, ale działa przyrostowo. Czas, w jaki trwa porządkowanie Z, nie ma gwarancji zmniejszenia liczby przebiegów. Jeśli jednak żadne nowe dane nie zostały dodane do partycji, która została po prostu zamówiona z, ponowne uruchomienie funkcji Porządkowanie Z na tej partycji nie ma wpływu. Kolejność Z tworzy równomiernie zrównoważone pliki danych w odniesieniu do liczby krotki, ale niekoniecznie rozmiar danych na dysku. Te dwie miary są najczęściej skorelowane, ale niesymetryczne czasy zadań optymalizacji mogą wystąpić, gdy się różnią.

Uwaga

W przypadku korzystania z środowiska Databricks Runtime w celu kontrolowania rozmiaru pliku wyjściowego ustaw konfigurację spark.databricks.delta.optimize.maxFileSize. Wartość domyślna to 1073741824 (1 GB). Określanie 104857600 ustawia rozmiar pliku na 100 MB.

Parametry

  • table_name

    Identyfikuje istniejącą tabelę Delta Lake lub zarządzaną tabelę Apache Iceberg. Nazwa nie może zawierać specyfikacji czasowej ani specyfikacji opcji.

  • FULL

    Dotyczy: zaznacz pole wyboru tak Dla środowiska Databricks Runtime 16.0 lub nowszego

    Przepisuje istniejące pliki danych, aby odpowiadały aktualnym ustawieniom układu tabeli. Użyj OPTIMIZE table_name FULL polecenia , aby:

    • Ponownie grupuj istniejące dane po włączeniu płynnego klastrowania lub zmianie kluczy klastrowania. FULL może przepisywać pliki, które nie są klastrowane lub które były klastrowane z innymi kluczami klastrowania. Nie przepisuje plików, które są już klastrowane z aktualnymi kluczami klastrowania. Jeśli klucze klastrowania się nie zmieniły, klastruje OPTIMIZE table_name FULL te same pliki co OPTIMIZE table_name. Zobacz Wymuszanie ponownego klastrowania.
    • Ponownie skompresuj istniejące pliki danych podczas zmiany kodera kompresji tabeli przy użyciu delta.parquet.compression.codec właściwości .

    Aby ponownie skompresować istniejące dane po zmianie kodera-dekodera kompresji, uruchom polecenie OPTIMIZE table_name FULL:

    -- Change compression codec
    ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');
    
    -- Recompress all existing data files
    OPTIMIZE table_name FULL;
    

    Aby zoptymalizować podzbiór plików w tabeli z włączonym klastrowaniem płynnym, połącz się FULL z predykatem WHERE (Databricks Runtime 18.1 lub nowszym). Obsługiwane są tylko proste predykaty zakresu w jednej kolumnie klastrowania. Plik jest dołączany, jeśli jakakolwiek część jego zakresu nakłada się na predykat. Na przykład zawiera plik z zakresemOPTIMIZE events FULL WHERE date > 15, (col_min = 10, col_max = 20) ponieważ zakres pliku nakłada się na predykat. Spośród dołączonych plików przepisuje FULL WHERE tylko te, które mogłyby FULL je przepisać. Pliki, które są już klastrowane z aktualnymi kluczami klastrowania, nie są przepisywane.

  • WHERE

    Optymalizuje podzbiór wierszy pasujących do predykatu partycji/klastrowania. Obsługiwane są tylko filtry atrybutów klucza partycji/klastrowania.

    W przypadku tabel korzystających z klastrowania płynnego należy zamiast tego użyć funkcji OPTIMIZE table_name FULL WHERE predicate (Databricks Runtime 18.1 i nowszych).

  • ZORDER BY

    Uwaga

    Usługa Databricks zaleca płynne klastrowanie dla wszystkich nowych tabel zamiast porządkowania Z. Zobacz Używaj płynnego grupowania dla tabel.

    Sortuje informacje o kolumnach w tym samym zestawie plików. Algorytmy pomijania danych usługi Delta Lake używają współlokalności, aby zmniejszyć ilość danych, które należy odczytać. Można określić wiele kolumn jako listę rozdzielaną przecinkami, ale skuteczność współlokalności spada wraz z każdą dodatkową kolumną.

    Nie możesz używać tej klauzuli w tabelach używających grupowania płynnego ani w tabelach Apache Iceberg.

Przykłady

> OPTIMIZE events;

> OPTIMIZE events FULL;

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

> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';

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

Więcej informacji można znaleźć w zobaczeniach: Optymalizacja układu plików danych oraz optymalizacja zarządzanych tabel Iceberg.