Konfigurowanie usługi Delta Lake w celu kontrolowania rozmiaru pliku danych

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.

Uwaga

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 usługi Delta Lake.

W środowisku Databricks Runtime 10.4 LTS i nowszym automatyczne kompaktowanie i zoptymalizowane zapisy są zawsze włączone dla MERGEoperacji , UPDATEi DELETE . Nie można wyłączyć tej funkcji.

O ile nie określono inaczej, wszystkie zalecenia zawarte w tym artykule nie mają zastosowania do tabel zarządzanych wykazu aparatu Unity z uruchomionymi najnowszymi środowiskami uruchomieniowymi.

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 z środowiska Databricks Runtime 11.0 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 w wersji 10.1 lub nowszej.
legacy Alias dla elementu true. Wymaga środowiska Databricks Runtime w wersji 10.1 lub nowszej.
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 10.3 lub nowszym, gdy inni autorzy wykonują operacje, takie jak DELETE, MERGE, UPDATElub OPTIMIZE współbieżnie, automatyczne kompaktowanie może spowodować niepowodzenie tych innych zadań z powodu konfliktu transakcji. Nie jest to problem w środowisku Databricks Runtime 10.4 lub 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:

Optimized writes

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 podzapytaniami
  • DELETE 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.1 lub nowszym wszystkie tabele delty 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 truewartoś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 truewartość . 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 10.5 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.