Konfigurowanie usługi Delta Lake w celu kontrolowania rozmiaru pliku danych
Uwaga
Zalecenia zawarte w tym artykule nie dotyczą tabel zarządzanych w wykazie aparatu Unity. Usługa Databricks zaleca używanie tabel zarządzanych wykazu aparatu Unity z ustawieniami domyślnymi dla wszystkich nowych tabel delty.
W środowisku Databricks Runtime 13.3 lub nowszym usługa Databricks zaleca używanie klastrowania dla układu tabeli delty. Zobacz Użyj płynnego klastrowania dla tabel typu Delta).
Usługa Databricks zaleca korzystanie z optymalizacji predykcyjnej w celu automatycznego uruchamiania OPTIMIZE
tabel delta i VACUUM
ich obsługi. Zobacz Optymalizacja predykcyjna dla tabel zarządzanych w wykazie aparatu Unity.
W środowisku Databricks Runtime 10.4 LTS i nowszym automatyczne kompaktowanie i zoptymalizowane zapisy są zawsze włączone dla MERGE
operacji , UPDATE
i DELETE
. Nie można wyłączyć tej funkcji.
Usługa Delta Lake udostępnia opcje ręcznego lub automatycznego konfigurowania docelowego rozmiaru pliku 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 usługę Unity usługa Databricks dostraja większość tych konfiguracji automatycznie, jeśli używasz usługi SQL Warehouse lub Databricks Runtime 11.3 LTS lub nowszej.
Jeśli uaktualniasz obciążenie ze środowiska Databricks Runtime 10.4 LTS lub starszego, zobacz Uaktualnianie do automatycznego kompaktowania w tle.
Kiedy należy uruchomić OPTIMIZE
Automatyczne kompaktowanie i zoptymalizowane zapisy zmniejszają problemy z małymi plikami, ale nie są pełnym zamiennikiem .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 Azure Databricks nie jest uruchamiana ZORDER
automatycznie w tabelach, dlatego należy uruchomić polecenie OPTIMIZE
z poleceniem , ZORDER
aby umożliwić pomijanie rozszerzonych danych. Zobacz Pomijanie danych dla usługi Delta Lake.
Co to jest automatyczna optymalizacja w usłudze Azure Databricks?
Termin autooptymalizowanie jest czasami używany do opisywania funkcji kontrolowanych przez ustawienia delta.autoOptimize.autoCompact
i delta.autoOptimize.optimizeWrite
. Ten termin został wycofany na rzecz opisywania każdego ustawienia indywidualnie. Zobacz Automatyczne kompaktowanie usługi Delta Lake w usłudze Azure Databricks i Zoptymalizowane zapisy dla usługi Delta Lake w usłudze Azure Databricks.
Automatyczne kompaktowanie usługi Delta Lake w usłudze Azure Databricks
Automatyczne kompaktowanie łączy małe pliki w partycjach tabeli delty, aby automatycznie zmniejszyć małe problemy z plikami. Automatyczne kompaktowanie występuje po pomyślnym zakończeniu zapisu w tabeli i uruchomieniu synchronicznie w klastrze, który wykonał zapis. Automatyczne kompaktowanie tylko kompaktuje pliki, które nie zostały wcześniej skompaktowane.
Rozmiar pliku wyjściowego można kontrolować, ustawiając konfigurację spark.databricks.delta.autoCompact.maxFileSize
platformy Spark. Usługa Databricks zaleca używanie automatycznego dostrajania na podstawie obciążenia lub rozmiaru tabeli. Zobacz Autotune file size based on workload and Autotune file size based on table size (Automatyczne dostrajania rozmiaru pliku na podstawie rozmiaru tabeli).
Automatyczne kompaktowanie jest wyzwalane tylko dla partycji lub tabel, które mają co najmniej określoną liczbę małych plików. Opcjonalnie możesz zmienić minimalną liczbę plików wymaganych do wyzwolenia automatycznego kompaktowania, ustawiając wartość spark.databricks.delta.autoCompact.minNumFiles
.
Automatyczne kompaktowanie można włączyć na poziomie tabeli lub sesji przy użyciu następujących ustawień:
- Właściwość tabeli:
delta.autoOptimize.autoCompact
- Ustawienie SparkSession:
spark.databricks.delta.autoCompact.enabled
Te ustawienia akceptują następujące opcje:
Opcje | Zachowanie |
---|---|
auto (zalecane) |
Rozmiar pliku docelowego programu Tunes z uwzględnieniem innych funkcji 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 sesji, aby zastąpić automatyczne kompaktowanie dla wszystkich tabel delty zmodyfikowanych w obciążeniu. |
Ważne
W środowisku Databricks Runtime 9.1 LTS, gdy inni autorzy wykonują operacje, takie jak DELETE
, MERGE
, lub UPDATE
OPTIMIZE
jednocześnie, automatyczne kompaktowanie może spowodować niepowodzenie tych innych zadań z powodu konfliktu transakcji. Nie jest to problem w środowisku Databricks Runtime 10.4 LTS i nowszym.
Zoptymalizowane zapisy dla usługi Delta Lake w usłudze Azure Databricks
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ższej ilustracji przedstawiono sposób działania zoptymalizowanych zapisów:
Uwaga
Może istnieć kod uruchamiany coalesce(n)
lub repartition(n)
tuż przed zapisaniem danych w celu kontrolowania liczby zapisanych plików. Zoptymalizowane zapisy eliminuje konieczność używania tego wzorca.
Zoptymalizowane zapisy są domyślnie włączone dla następujących operacji w środowisku Databricks Runtime 9.1 LTS lub nowszym:
MERGE
UPDATE
z podzapytaniamiDELETE
z podzapytaniami
Zoptymalizowane zapisy są również włączone dla CTAS
instrukcji i INSERT
operacji podczas korzystania z usługi SQL Warehouse. W środowisku Databricks Runtime 13.3 LTS i nowszym wszystkie tabele różnicowe zarejestrowane w wykazie aparatu Unity mają zoptymalizowane zapisy dla CTAS
instrukcji i INSERT
operacji dla tabel partycjonowanych.
Zoptymalizowane zapisy można włączyć na poziomie tabeli lub sesji przy użyciu następujących ustawień:
- Ustawienie tabeli:
delta.autoOptimize.optimizeWrite
- Ustawienie SparkSession:
spark.databricks.delta.optimizeWrite.enabled
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 sesji, aby zastąpić automatyczne kompaktowanie dla wszystkich tabel delty zmodyfikowanych w obciążeniu. |
Ustawianie rozmiaru pliku docelowego
Jeśli chcesz dostroić rozmiar plików w tabeli delty, ustaw właściwość delta.targetFileSize
tabeli na żądany rozmiar. Jeśli ta właściwość jest ustawiona, wszystkie operacje optymalizacji układu danych będą podejmować najlepszą próbę wygenerowania plików o określonym rozmiarze. Przykłady obejmują optymalizację lub kolejność Z, automatyczne kompaktowanie i zoptymalizowane zapisy.
Uwaga
W przypadku korzystania z tabel zarządzanych w wykazie aparatu Unity i magazynów SQL lub środowiska Databricks Runtime 11.3 LTS i nowszych polecenia są zgodne tylko OPTIMIZE
z ustawieniem targetFileSize
.
Właściwość tabeli |
---|
delta.targetFileSize Typ: rozmiar w bajtach lub wyższej jednostki. Rozmiar pliku docelowego. Na przykład 104857600 (bajty) lub 100mb .Wartość domyślna: Brak |
W przypadku istniejących tabel można ustawiać i nie ustawiać właściwości przy użyciu polecenia SQL ALTER TABLE SET TBL PROPERTIES. 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 delty.
Automatyczne dostrajania rozmiaru pliku na podstawie obciążenia
Usługa Databricks zaleca ustawienie właściwości delta.tuneFileSizesForRewrites
tabeli na true
dla wszystkich tabel, które są objęte wieloma MERGE
operacjami lub operacjami DML, niezależnie od środowiska Databricks Runtime, wykazu aparatu Unity lub innych optymalizacji. W przypadku ustawienia true
wartości rozmiar pliku docelowego dla tabeli jest ustawiony na znacznie niższy próg, co przyspiesza operacje intensywnie korzystające z zapisu.
Jeśli nie ustawiono jawnie, usługa Azure Databricks automatycznie wykrywa, czy 9 z ostatnich 10 poprzednich operacji w tabeli delty dotyczyło MERGE
operacji i ustawia tę właściwość tabeli na true
wartość . Aby uniknąć tego zachowania, należy jawnie ustawić false
tę właściwość.
Właściwość tabeli |
---|
delta.tuneFileSizesForRewrites Typ: Boolean Czy dostroić rozmiary plików na potrzeby optymalizacji układu danych. Wartość domyślna: Brak |
W przypadku istniejących tabel można ustawiać i nie ustawiać właściwości przy użyciu polecenia SQL ALTER TABLE SET TBL PROPERTIES. 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 delty.
Automatyczne dostrajania rozmiaru pliku na podstawie rozmiaru tabeli
Aby zminimalizować potrzebę ręcznego dostrajania, usługa Azure Databricks automatycznie dostraja rozmiar pliku tabel delty na podstawie rozmiaru tabeli. Usługa Azure Databricks będzie 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 dostosowywała tabel, które zostały dostrojone z określonym rozmiarem docelowym lub na podstawie obciążenia z częstymi ponownym zapisywaniem.
Rozmiar pliku docelowego jest oparty na bieżącym rozmiarze tabeli delty. W przypadku tabel mniejszych niż 2,56 TB rozmiar pliku docelowego z automatycznym dostrojonym rozmiarem 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ą ponownie zoptymalizowane pod kątem większych plików za OPTIMIZE
pomocą polecenia . 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 delta.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 | 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 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 usługi Delta Lake. 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żyć opcji maxRecordsPerFile
DataFrameWriter podczas używania interfejsów API ramki danych do zapisywania w tabeli usługi Delta Lake. 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 wykaz aparatu Unity z bardzo wąskimi danymi.
Uaktualnianie do autokompaktacji w tle
Automatyczne kompaktowanie w tle jest dostępne dla tabel zarządzanych przez wykaz aparatu Unity w środowisku Databricks Runtime 11.3 LTS lub nowszym. Podczas migracji starszego obciążenia lub tabeli wykonaj następujące czynności:
- Usuń konfigurację
spark.databricks.delta.autoCompact.enabled
platformy Spark z ustawień konfiguracji klastra lub notesu. - Dla każdej tabeli uruchom polecenie
ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact)
, aby usunąć wszystkie starsze ustawienia automatycznego kompaktowania.
Po usunięciu tych starszych konfiguracji powinno zostać automatycznie wyzwolone automatyczne kompaktowanie w tle dla wszystkich tabel zarządzanych przez wykaz aparatu Unity.