Optymalizowanie układu pliku danych
Optymalizacja predykcyjna jest uruchamiana OPTIMIZE
automatycznie w tabelach zarządzanych w wykazie aparatu Unity. Usługa Databricks zaleca włączenie optymalizacji predykcyjnej dla wszystkich tabel zarządzanych przez wykaz aparatu Unity, aby uprościć konserwację danych i zmniejszyć koszty magazynowania. Zobacz Optymalizacja predykcyjna dla tabel zarządzanych w wykazie aparatu Unity.
Polecenie OPTIMIZE
ponownie zapisuje pliki danych, aby ulepszyć układ danych dla tabel delty. W przypadku tabel z włączonym OPTIMIZE
klastrowaniem płynnym ponownie zapisuje pliki danych w celu grupowania danych za pomocą płynnych kluczy klastrowania. W przypadku tabel ze zdefiniowanymi partycjami kompaktowanie plików i układ danych są wykonywane w partycjach.
Tabele bez klastrowania płynnego 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 OPTYMALIZOWANIE.
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 polecenia 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 delty używają izolacji migawki, co oznacza, że nie są przerywane, gdy OPTIMIZE
usuwa niepotrzebne pliki z dziennika transakcji. OPTIMIZE
nie wprowadza żadnych zmian związanych z danymi w tabeli, więc odczyt przed i po obiekcie OPTIMIZE
ma te same wyniki. Wykonywanie w OPTIMIZE
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ę. Optymalizacja statystyk zawiera również statystyki porządkowania Z, liczbę partii i partycje zoptymalizowane.
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 wykaz aparatu Unity, aby upewnić się, że OPTIMIZE
działa automatycznie, gdy jest opłacalna.
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.