Optymalizowanie układu pliku danych
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 delty. 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.
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
Kompaktowanie jest wyzwalane przez uruchomienie OPTIMIZE
polecenia :
SQL
OPTIMIZE table_name
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
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, możesz określić opcjonalny predykat partycji przy użyciu WHERE
:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
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.
- Pakowanie pojemników ma na celu tworzenie równomiernie zrównoważonych plików danych w odniesieniu do ich rozmiaru na dysku, ale niekoniecznie liczby krotek na plik. Jednak te dwie miary są najczęściej skorelowane.
- Interfejsy API języka Python i języka Scala do wykonywania
OPTIMIZE
operacji 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 usługi Delta Lake w usłudze Azure Databricks.
Jak często należy 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 OPTIMIZE
istnieje 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.
Usługa Databricks zaleca rozpoczęcie pracy OPTIMIZE
codziennie, a następnie dostosowanie częstotliwości w celu zrównoważenia kompromisów kosztów i wydajności.
Jaki jest najlepszy typ wystąpienia do uruchomienia OPTIMIZE
(bin-packing i Z-Ordering) na?
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 typy wystąpień zoptymalizowanych pod kątem obliczeń.
OPTIMIZE
ponadto korzysta z dołączonych dysków SSD.