Udostępnij za pośrednictwem


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, ZORDERlub 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 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.

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.