Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Uwaga
Zalecenia dotyczące ręcznego dostosowania w tym artykule nie mają zastosowania do tabel zarządzanych przez Unity Catalog, które używają automatycznej regulacji rozmiaru pliku. W przypadku nowych tabel użyj tabel zarządzanych przez Unity Catalog z ustawieniami domyślnymi.
W środowisku Databricks Runtime 13.3 lub nowszym usługa Databricks zaleca używanie klastrowania dla układu tabeli. Zobacz Używaj płynnego grupowania dla tabel.
Databricks zaleca używanie optymalizacji predykcyjnej do automatycznego uruchamiania OPTIMIZE i VACUUM dla tabel. Zobacz Optymalizację predykcyjną dla tabel zarządzanych w Unity Catalog.
W środowisku Databricks Runtime 10.4 LTS i nowszym automatyczne kompaktowanie i zoptymalizowane zapisy są zawsze włączone dla operacji MERGE, UPDATE i DELETE. Nie można wyłączyć tej funkcji.
Dostępne są opcje ręcznego lub automatycznego konfigurowania rozmiaru pliku docelowego dla operacji zapisu i operacji OPTIMIZE . Usługa Azure Databricks automatycznie dostraja wiele z tych ustawień i umożliwia funkcje, które automatycznie zwiększają wydajność tabeli, szukając plików o odpowiednim rozmiarze.
W przypadku tabel zarządzanych przez katalog Unity usługa Databricks dostraja większość tych konfiguracji automatycznie, jeśli używasz magazynu SQL lub Databricks Runtime 11.3 LTS lub nowszej.
Jeśli aktualizujesz obciążenie ze środowiska Databricks Runtime 10.4 LTS lub starszego, zapoznaj się z Aktualizacją do kompaktowania automatycznego w tle.
Kiedy należy uruchomić OPTIMIZE
Automatyczne kompaktowanie i zoptymalizowane zapisy zmniejszają problemy z małymi plikami, ale nie są pełnym zamiennikiem dla OPTIMIZE. Szczególnie w przypadku tabel większych niż 1 TB usługa Databricks zaleca uruchamianie OPTIMIZE zgodnie z harmonogramem w celu dalszego skonsolidowania plików. Usługa Databricks zaleca płynne klastrowanie w celu zwiększenia pomijania danych. Po włączeniu OPTIMIZE klastrowania płynnego automatycznie zreorganizuje dane za pomocą kluczy klastrowania. Zobacz Używaj płynnego grupowania dla tabel.
W przypadku tabel zarządzanych przez Unity Catalog optymalizacja predykcyjna jest automatycznie uruchamiana OPTIMIZE na tabelach z włączoną optymalizacją predykcyjną.
Co to jest automatyczna optymalizacja w usłudze Azure Databricks?
Termin autooptymalizowanie jest czasami używany do opisywania funkcji kontrolowanych przez ustawienia autoOptimize.autoCompact i autoOptimize.optimizeWrite. Ten termin został wycofany na rzecz opisywania każdego ustawienia osobno. Zobacz Automatyczne kompaktowanie i zoptymalizowane zapisy.
Automatyczne kompaktowanie
Automatyczne kompaktowanie łączy małe pliki w partycjach tabeli, aby zmniejszyć problemy z małymi plikami. Działa synchronicznie w klastrze, który wykonuje zapis, po pomyślnym zakończeniu zapisu i kompaktuje tylko pliki, które nie zostały wcześniej skompaktowane.
Automatyczne kompaktowanie i optymalizacja predykcyjna to niezależne funkcje, które mogą być używane oddzielnie lub razem. Automatyczne kompaktowanie działa w klastrze wykonującym zapis, podczas gdy optymalizacja predykcyjna uruchamia operacje konserwacji asynchronicznie przy użyciu bezserwerowych obliczeń.
Użyj następujących ustawień, aby skonfigurować automatyczne kompaktowanie:
| Setting | Delta | Iceberg | Description |
|---|---|---|---|
| Włącz automatyczne kompaktowanie (właściwość tabeli) | autoOptimize.autoCompact |
autoOptimize.autoCompact |
Umożliwia automatyczne kompaktowanie na poziomie tabeli. |
| Włącz automatyczne kompaktowanie (sesja platformy Spark) | spark.databricks.delta.autoCompact.enabled |
spark.databricks.iceberg.autoCompact.enabled |
Umożliwia automatyczne kompaktowanie na poziomie sesji. |
| Maksymalny rozmiar pliku wyjściowego | spark.databricks.delta.autoCompact.maxFileSize |
spark.databricks.iceberg.autoCompact.maxFileSize |
Steruje rozmiarem docelowego pliku wyjściowego. |
| Minimalne pliki do wyzwalania kompaktowania | spark.databricks.delta.autoCompact.minNumFiles |
spark.databricks.iceberg.autoCompact.minNumFiles |
Ustawia minimalną liczbę małych plików wymaganą w partycji lub tabeli do aktywowania automatycznego kompaktowania. |
Te ustawienia akceptują następujące opcje:
| Opcje | Zachowanie |
|---|---|
auto (zalecane) |
Dostosowuje docelowy rozmiar pliku, uwzględniając inne funkcje automatycznego dostrajania. Wymaga środowiska Databricks Runtime 10.4 LTS lub nowszego. |
legacy |
Alias dla elementu true. Wymaga środowiska Databricks Runtime 10.4 LTS lub nowszego. |
true |
Użyj 128 MB jako rozmiaru pliku docelowego. Brak dynamicznego określania rozmiaru. |
false |
Wyłącza automatyczne kompaktowanie. Można ustawić na poziomie konkretnej sesji, aby nadpisać automatyczne kompaktowanie wszystkich tabel zmodyfikowanych w ramach obciążenia. |
Uwaga
Usługa Azure Databricks zaleca używanie automatycznego dostrajania w celu kontrolowania rozmiaru pliku wyjściowego na podstawie rozmiaru tabeli. Zobacz Automatyczna optymalizacja rozmiaru pliku w oparciu o rozmiar tabeli.
Zoptymalizowane zapisy
Zoptymalizowane zapisy zwiększają rozmiar pliku, ponieważ dane są zapisywane, a kolejne operacje odczytu w tabeli są korzystne.
Zoptymalizowane zapisy są najbardziej skuteczne w przypadku tabel partycjonowanych, ponieważ zmniejszają liczbę małych plików zapisywanych w każdej partycji. Zapisywanie mniejszej liczby dużych plików jest bardziej wydajne niż zapisywanie wielu małych plików, ale nadal może wystąpić wzrost opóźnienia zapisu, ponieważ dane są przetasowane przed zapisaniem.
Na poniższym obrazie przedstawiono, jak działają zoptymalizowane zapisy:
Uwaga
Może istnieć kod uruchamiany coalesce(n) lub repartition(n) tuż przed zapisaniem danych w celu kontrolowania liczby zapisanych plików. Zoptymalizowane zapisy eliminują konieczność używania tych wzorców.
Zoptymalizowane zapisy są domyślnie włączone dla następujących operacji w środowisku Databricks Runtime 9.1 LTS lub nowszym:
MERGE-
UPDATEz podzapytaniami -
DELETEz podzapytaniami
Zoptymalizowane zapisy są również włączone dla CTAS instrukcji i INSERT operacji podczas korzystania z usługi SQL Warehouse. W Databricks Runtime 13.3 LTS i nowszych wszystkie tabele zarejestrowane w Unity Catalog mają włączone zoptymalizowane zapisy dla instrukcji CTAS i operacji INSERT w przypadku tabel partycjonowanych.
Zoptymalizowane zapisy można włączyć na poziomie tabeli lub sesji przy użyciu następujących ustawień:
- Właściwość tabeli:
autoOptimize.optimizeWrite - Ustawienie SparkSession:
spark.databricks.delta.optimizeWrite.enabled(Delta) lubspark.databricks.iceberg.optimizeWrite.enabled(Iceberg)
Te ustawienia akceptują następujące opcje:
| Opcje | Zachowanie |
|---|---|
true |
Użyj 128 MB jako rozmiaru pliku docelowego. |
false |
Wyłącza zoptymalizowane zapisy. Można ustawić na poziomie konkretnej sesji, aby nadpisać automatyczne kompaktowanie wszystkich tabel zmodyfikowanych w ramach obciążenia. |
Ustawianie rozmiaru pliku docelowego
Jeśli chcesz dostroić rozmiar plików w tabeli, ustaw właściwośćtargetFileSize tabeli na żądany rozmiar. Po ustawieniu wszystkie operacje optymalizacji układu danych podejmują najlepszą próbę wygenerowania plików o określonym rozmiarze, w tym optymalizację, klastrowanie cieczy, automatyczne kompaktowanie i zoptymalizowane zapisy.
Uwaga
W przypadku korzystania z tabel zarządzanych przez Unity Catalog oraz magazynów SQL lub środowiska Databricks Runtime 11.3 LTS i nowszych, tylko polecenia OPTIMIZE są zgodne z ustawieniem targetFileSize.
| Majątek | Description |
|---|---|
delta.targetFileSize (Delta)iceberg.targetFileSize (Góra lodowa) |
Typ: rozmiar w bajtach lub wyższej jednostki. Opis: rozmiar pliku docelowego. Na przykład 104857600 (bajty) lub 100mb.Wartość domyślna: Brak |
W przypadku istniejących tabel, można ustawić i usunąć ustawienia za pomocą polecenia SQL ALTER TABLESET WŁAŚCIWOŚCI TABELI. Te właściwości można również ustawić automatycznie podczas tworzenia nowych tabel przy użyciu konfiguracji sesji platformy Spark. Aby uzyskać szczegółowe informacje, zobacz Dokumentację właściwości tabeli .
Automatyczne dostrajania rozmiaru pliku na podstawie rozmiaru tabeli
Aby zminimalizować potrzebę ręcznego dostrajania, usługa Azure Databricks automatycznie dostraja rozmiar pliku tabel na podstawie rozmiaru tabeli. Usługa Azure Databricks używa mniejszych rozmiarów plików dla mniejszych tabel i większych rozmiarów plików dla większych tabel, aby liczba plików w tabeli nie rosła zbyt duża. Usługa Azure Databricks nie dostraja tabel, które zostały dostrojone z określonym rozmiarem docelowym.
Rozmiar pliku docelowego zależy od bieżącego rozmiaru tabeli. W przypadku tabel mniejszych niż 2,56 TB dostrojony automatycznie rozmiar pliku docelowego wynosi 256 MB. W przypadku tabel o rozmiarze od 2,56 TB do 10 TB rozmiar docelowy wzrośnie liniowo z 256 MB do 1 GB. W przypadku tabel większych niż 10 TB rozmiar pliku docelowego wynosi 1 GB.
Uwaga
Gdy rozmiar pliku docelowego tabeli wzrośnie, istniejące pliki nie są optymalizowane na nowo za pomocą polecenia OPTIMIZE. W związku z tym duża tabela może mieć zawsze pliki mniejsze niż rozmiar docelowy. Jeśli wymagane jest zoptymalizowanie tych mniejszych plików na większe pliki, można również skonfigurować stały rozmiar pliku docelowego dla tabeli przy użyciu targetFileSize właściwości tabeli.
Gdy tabela jest zapisywana przyrostowo, rozmiary plików docelowych i liczby plików będą zbliżone do następujących liczb na podstawie rozmiaru tabeli. Liczby plików w tej tabeli są tylko przykładem. Rzeczywiste wyniki będą się różnić w zależności od wielu czynników.
| Rozmiar tabeli | Rozmiar pliku docelowego | Przybliżona liczba plików w tabeli |
|---|---|---|
| 10 GB | 256 MB | 40 |
| 1 TB (terabajt) | 256 MB | 4096 |
| 2,56 TB | 256 MB | 10240 |
| 3 TB | 307 MB | 12108 |
| 5 TB | 512 MB | 17339 |
| 7 TB | 716 MB | 20784 |
| 10 terabajtów (TB) | 1 GB | 24437 |
| 20 TB | 1 GB | 34437 |
| 50 TB | 1 GB | 64437 |
| 100 TB | 1 GB | 114437 |
Ograniczanie wierszy zapisanych w pliku danych
Czasami tabele z wąskimi danymi mogą napotkać błąd polegający na tym, że liczba wierszy w danym pliku danych przekracza limity obsługi formatu Parquet. Aby uniknąć tego błędu, możesz użyć konfiguracji spark.sql.files.maxRecordsPerFile sesji SQL, aby określić maksymalną liczbę rekordów do zapisu w jednym pliku dla tabeli. Określenie wartości zerowej lub ujemnej nie reprezentuje żadnego limitu.
W środowisku Databricks Runtime 11.3 LTS lub nowszym można również używać opcji maxRecordsPerFile z DataFrameWriter przy korzystaniu z API DataFrame do zapisywania danych do tabeli. Po maxRecordsPerFile określeniu wartość konfiguracji spark.sql.files.maxRecordsPerFile sesji SQL jest ignorowana.
Uwaga
Usługa Databricks nie zaleca używania tej opcji, chyba że konieczne jest uniknięcie wyżej wymienionego błędu. To ustawienie może być nadal konieczne w przypadku niektórych tabel zarządzanych przez Katalog Unity o małej objętości danych.
Uaktualnienie do automatycznej kompresji w tle
Automatyczne kompaktowanie w tle jest dostępne dla tabel zarządzanych przez Unity Catalog w środowisku Databricks Runtime 11.3 LTS i nowszych. Automatyczne kompaktowanie w tle nie wymaga optymalizacji predykcyjnej. Podczas migracji starszego obciążenia lub tabeli wykonaj następujące czynności:
- Usuń konfigurację Spark
spark.databricks.delta.autoCompact.enabled(Delta) lubspark.databricks.iceberg.autoCompact.enabled(Iceberg) z ustawień konfiguracji klastra lub notesu. - Dla każdej tabeli uruchom polecenie
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)(Delta) lubALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact)(Iceberg), aby usunąć wszystkie starsze ustawienia automatycznego kompaktowania.
Po usunięciu tych zbędnych konfiguracji powinno zostać automatycznie wyzwolone automatyczne kompaktowanie w tle dla wszystkich tabel zarządzanych przez Unity Catalog.