Udostępnij za pośrednictwem


OPTIMIZE

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

Na tej stronie opisano OPTIMIZE polecenie, które optymalizuje układ danych usługi Delta Lake. 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ę delty. Nazwa nie może zawierać specyfikacji czasowej ani specyfikacji opcji.

  • FULL

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

    Ponownie zapisuje wszystkie pliki danych w tabeli. Użyj OPTIMIZE table_name FULL polecenia , aby:

    • Zoptymalizuj całą tabelę, w tym dane, które zostały wcześniej klastrowane (w przypadku tabel korzystających z klastrowania płynnego).
    • 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.

  • 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żna użyć tej klauzuli w tabelach korzystających z klastrowania płynnego.

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);

Aby uzyskać więcej informacji, zobacz Optymalizowanie układu pliku danych.