Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Optymalizacja predykcyjna automatycznie uruchamia OPTIMIZE w zarządzanych tabelach Unity Catalog. Usługa Databricks zaleca włączenie optymalizacji predykcyjnej dla wszystkich tabel zarządzanych w ramach Unity Catalog, aby uprościć utrzymanie danych i zmniejszyć koszty przechowywania. Zobacz Optymalizację predykcyjną dla tabel zarządzanych przez Unity Catalog.
Polecenie OPTIMIZE ponownie zapisuje pliki danych, aby ulepszyć układ danych dla tabel. W przypadku tabel z włączonym liquid clustering, OPTIMIZE ponownie zapisuje pliki danych, aby grupować dane według kluczy liquid clustering. W przypadku tabel ze zdefiniowanymi partycjami kompaktowanie plików i układ danych są wykonywane w partycjach.
Tabele bez klastrowania cieczy mogą opcjonalnie zawierać klauzulę ZORDER BY w celu ulepszenia klastrowania danych podczas ponownego zapisywania. Usługa Databricks zaleca używanie klastrowania liquid zamiast partycji, ZORDER lub innych metod układu danych.
Uwaga
ZORDER jest optymalizacją specyficzną dla usługi Delta Lake. Tabele Apache Iceberg używają zamiast tego strategii klastrowania i sortowania.
Zobacz OPTIMIZE.
Ważny
W środowisku Databricks Runtime 16.0 lub nowszym można użyć OPTIMIZE FULL, aby wymusić ponowne tworzenie tabel z włączonym klastrowaniem płynnym. Zobacz Wymuszanie ponownego grupowania wszystkich rekordów.
Przykłady składni
Wyzwalaj kompaktowanie, uruchamiając OPTIMIZE polecenie:
SQL
OPTIMIZE table_name
Python
Interfejs API deltaTable języka Python jest specyficzny dla usługi Delta Lake.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Skala
Interfejs API DeltaTable w Scali jest specyficzny dla Delta Lake.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Jeśli masz dużą ilość danych i chcesz zoptymalizować tylko podzbiór, określ opcjonalny predykat partycji przy użyciu polecenia WHERE:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
Interfejs API deltaTable języka Python jest specyficzny dla usługi Delta Lake.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Skala
Interfejs API DeltaTable w Scali jest specyficzny dla Delta Lake.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Uwaga
- Optymalizacja pakowania bin jest idempotentna, co oznacza, że jeśli jest uruchamiany dwa razy w tym samym zestawie danych, drugi przebieg nie ma wpływu.
- Problem pakowania w pojemniki ma na celu tworzenie zrównoważonych plików danych w stosunku do ich rozmiaru na dysku, ale niekoniecznie liczby rekordów na plik. Jednak te dwie miary są najczęściej skorelowane.
- Interfejsy API języka Python i języka Scala do wykonywania
OPTIMIZEoperacji są dostępne w środowisku Databricks Runtime 11.3 LTS i nowszym.
Czytelnicy tabel Delta używają izolacji migawki, co oznacza, że nie są przerywani, gdy OPTIMIZE usuwa niepotrzebne pliki z dziennika transakcji.
OPTIMIZE nie wprowadza żadnych zmian związanych z danymi w tabeli, dlatego odczyt przed i po OPTIMIZE ma te same wyniki. Wykonywanie OPTIMIZE w tabeli, która jest źródłem przesyłania strumieniowego, nie ma wpływu na żadne bieżące lub przyszłe strumienie, które traktują tę tabelę jako źródło.
OPTIMIZE Zwraca statystykę pliku (minimalną, maksymalną, całkowitą itd.) dla usuniętych plików i plików dodanych przez operację. Statystyki optymalizacji zawierają również statystyki porządkowania Z, liczbę partii oraz zoptymalizowane partycje.
Można również automatycznie kompaktować małe pliki przy użyciu autokompaktacji. Zobacz Automatyczne kompaktowanie.
Jak często powinienem uruchomić OPTIMIZE?
Włącz optymalizację predykcyjną dla tabel zarządzanych przez Unity Catalog, aby upewnić się, że OPTIMIZE uruchamia się automatycznie, gdy jest to opłacalne.
W przypadku wybrania częstotliwości uruchamiania OPTIMIZEistnieje kompromis między wydajnością a kosztami. Aby uzyskać lepszą wydajność zapytań użytkowników końcowych, uruchom OPTIMIZE je częściej. Spowoduje to naliczenie wyższych kosztów ze względu na zwiększone użycie zasobów. Aby zoptymalizować koszt, uruchom go rzadziej.
Databricks zaleca uruchomienie OPTIMIZE codziennie, a następnie dostosowanie częstotliwości, aby zrównoważyć kompromisy między kosztami a wydajnością.
Jaki jest najlepszy typ instancji do uruchomienia OPTIMIZE (bin-packing i Z-Ordering)?
Obie operacje są operacjami wymagającymi dużej mocy obliczeniowej procesora, wykonującymi duże ilości dekodowania i kodowania Parquet.
Usługa Databricks zaleca obliczeniowo zoptymalizowane typy wystąpień.
OPTIMIZE ponadto korzysta z dołączonych dysków SSD.