Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Odpowiednie rozmiary plików są ważne w przypadku wydajności zapytań, wykorzystania zasobów i zarządzania metadanymi. Mniejsze pliki zwiększają nakład zadań i operacje na metadanych, podczas gdy większe pliki mogą niedostatecznie wykorzystywać równoległość i powodować nierównowagę operacji we/wy. Usługa Delta Lake używa metadanych plików do oczyszczania partycji i pomijania danych, dlatego określanie odpowiedniego rozmiaru pliku zapewnia wydajne odczyty, zapisy i konserwację.
W poniższej sekcji pokazano, jak używać różnych funkcji dostrajania rozmiaru pliku w celu osiągnięcia wydajności tabel delty.
Operacje układu danych z możliwością dostrajania
Optimize
Polecenie OPTIMIZE ponownie zapisuje małe pliki jako większe pliki, aby poprawić układ danych w tabelach delty. Aby uzyskać więcej informacji, w tym informacje o dostrajaniu rozmiaru pliku, zapoznaj się z dokumentacją polecenia OPTIMIZE .
Automatyczne kompaktowanie
Automatyczne kompaktowanie automatycznie ocenia kondycję partycji po każdej operacji zapisu. Po wykryciu nadmiernej fragmentacji pliku (zbyt wielu małych plików) w partycji wyzwala ona operację synchroniczną OPTIMIZE natychmiast po zatwierdzeniu zapisu. To podejście oparte na pisarzu do zarządzania plikami jest ogólnie optymalne, ponieważ kompaktowanie danych jest wykonywane tylko wtedy, gdy zostanie to określone jako korzystne przez program. Aby uzyskać szczegółowe opcje konfiguracji i dodatkowe informacje, zobacz dokumentację automatycznego kompaktowania .
Optymalizowanie zapisu
Optymalizacja zapisu zmniejsza obciążenie związane z małymi plikami, wykonując kompaktowanie przed zapisaniem (pakowanie bloków), co generuje mniej, ale większych plików. Takie podejście powoduje przetasowanie danych w pamięci do optymalnych rozmiarów pojemników, zanim platforma Spark zapisze pliki Parquet, maksymalizując potencjał generowania plików o odpowiednich rozmiarach bez potrzeby natychmiastowego czyszczenia po zapisaniu.
Optymalizowanie zapisu powinno być ostrożnie używane, ponieważ koszt obliczeniowy mieszania danych może spowodować dodanie nadmiernego i niepotrzebnego czasu przetwarzania do określonych scenariuszy zapisu. Optymalizowanie zapisu jest korzystne, gdy operacja zapisu w przeciwnym razie utworzy małe pliki, które byłyby kandydatami do kompaktowania później.
Optymalizacja zapisu jest często korzystna dla:
- Tabele partycjonowane
- Tabele z częstymi małymi wstawkami
- Operacje, które mogą dotykać wielu plików (
MERGE,UPDATE, iDELETE)
W przypadku selektywnej aplikacji dla określonych tabel wyłącz konfigurację sesji i włącz właściwość tabeli osobno. Anulowanie resetowania konfiguracji na poziomie sesji umożliwia sesjom platformy Spark odroczenie do każdej tabeli co do tego, czy należy zastosować optymalizację zapisu.
Wyłącz optymalizację zapisu
spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")Włącz dla pojedynczej tabeli
ALTER TABLE dbo.table_name SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite' = 'true')
Aby włączyć operacje zapisu we wszystkich partycjonowanych tabelach w sesji platformy Spark, upewnij się, że konfiguracja sesji jest nieskonfigurowana, a następnie włącz konfigurację spark.microsoft.delta.optimizeWrite.partitioned.enabledsesji:
Rozmiar pliku docelowego wygenerowany na podstawie optymalizacji zapisu można dostosować za pomocą spark.databricks.delta.optimizeWrite.binSize konfiguracji.
Uwaga / Notatka
Zobacz Profile zasobów , aby uzyskać domyślne ustawienia optymalizacji zapisu według profilu zasobu.
Spójne ustawianie rozmiaru pliku docelowego
Aby uniknąć konieczności ustawiania konfiguracji sesji minimalnego i maksymalnego rozmiaru pliku docelowego w celu optymalizacji, automatycznego kompaktowania i optymalizacji zapisu, usługa Microsoft Fabric udostępnia delta.targetFileSize właściwość tabeli jako sposób ujednolicenia wszystkich powiązanych konfiguracji układu danych na poziomie tabeli. Wartość rozmiaru pliku docelowego jest wprowadzana jako ciąg bajtowy (na przykład 1073741824b, , 1048576k1024m, 1g). Po określeniu ma pierwszeństwo przed wszystkimi innymi konfiguracjami sesji i adaptacyjnym rozmiarem pliku docelowego.
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')
Adaptacyjny rozmiar pliku docelowego
Usługa Microsoft Fabric udostępnia adaptacyjny rozmiar pliku docelowego, aby wyeliminować złożoność związaną z ręcznym dostrajaniem rozmiaru pliku docelowego wszystkich tabel w sesji lub poszczególnych tabelach za pośrednictwem delta.targetFileSize właściwości tabeli. Adaptacyjny rozmiar pliku docelowego używa algorytmów heurystycznych tabeli delty, takich jak rozmiar tabeli, aby oszacować idealny rozmiar pliku docelowego i automatycznie aktualizuje element docelowy w miarę zmiany warunków, zapewniając optymalną wydajność bez ręcznej interwencji lub nakładu pracy konserwacyjnych.
Uwaga / Notatka
Mimo że obecnie funkcja adaptacyjnego rozmiaru pliku docelowego nie jest włączona domyślnie, firma Microsoft zaleca jej aktywację w konfiguracji sesji.
Włącz adaptacyjny rozmiar pliku docelowego w tabelach utworzonych lub zmodyfikowanych w sesji platformy Spark, ustawiając następującą konfigurację sesji platformy Spark:
Po włączeniu, adaptacyjny rozmiar docelowego pliku jest oceniany i ustawiany w następujących scenariuszach:
-
CREATE TABLE AS SELECTiCREATE OR REPLACE TABLE AS SELECToperacje - Nadpisywanie zapisów (na przykład
DataFrame.write.mode("overwrite")lubINSERT OVERWRITE) - Pisze w trybie
ErrorIfExists,AppendlubIgnorepodczas tworzenia nowej tabeli - Na początku
OPTIMIZEpolecenia
Po ustaleniu idealny rozmiar będzie nadal ponownie oceniany na początku każdej operacji OPTIMIZE, aby zagwarantować, że bieżące heurystyki odzwierciedlają najnowszy układ danych i rozwój tabeli. To podejście adaptacyjne automatycznie aktualizuje docelowy rozmiar pliku w miarę upływu czasu, usuwając potrzebę ręcznego dostrajania przy zachowaniu wydajności zapytań i zapisu w miarę wzrostu danych. W razie potrzeby zablokowania określonego rozmiaru, na przykład podczas hyper-tuningu lub w przypadkach testowych, można zastąpić ustawienie adaptacyjne, jawnie ustawiając zdefiniowaną przez użytkownika właściwość tabeli delta.targetFileSize.
Oszacowaną wartość adaptacyjnego rozmiaru pliku docelowego można zweryfikować, uruchamiając polecenie DESCRIBE DETAIL lub DESCRIBE EXTENDED w tabeli. Szacowany adaptacyjny rozmiar jest przechowywany jako ciąg bajtowy we właściwości tabeli delta.targetFileSize.adaptive. Ta wartość jest używana jako konfiguracja maksymalnego lub docelowego rozmiaru w celu optymalizacji, automatycznego kompaktowania i optymalizowania zapisu. Minimalna wartość używana przez powiązane konfiguracje jest obliczana jako połowa .delta.targetFileSize.adaptive
Adaptacyjny rozmiar pliku docelowego można dodatkowo skonfigurować za pomocą następujących konfiguracji sesji platformy Spark:
| Majątek | Description | Wartość domyślna | Konfiguracja sesji |
|---|---|---|---|
| minFileSize | Określa minimalny rozmiar pliku (dolna granica) jako ciąg bajtu używany przez adaptacyjny rozmiar pliku docelowego podczas oceny. Musi mieć od 128 MB do 1 GB. | 128 m | spark.microsoft.delta.targetFileSize.adaptive.minFileSize |
| maxFileSize | Określa maksymalny rozmiar pliku (górna granica) jako ciąg bajtu używany przez adaptacyjny rozmiar pliku docelowego podczas oceny. Musi mieć od 128 MB do 1 GB. | 1024 m | spark.microsoft.delta.targetFileSize.adaptive.maxFileSize |
| stopAtMaxSize | Gdy true zatrzyma dalsze oceny rozmiaru, gdy obliczony rozmiar pliku docelowego osiągnie maxFileSize wartość, co zmniejsza obciążenie oceniania w bardzo dużych tabelach. |
true | spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize |
Uwaga / Notatka
Po stopAtMaxSize włączeniu (wartość domyślna) adaptacyjny rozmiar docelowy pozostaje stały na maksymalnej wartości po osiągnięciu, unikając dodatkowych obliczeń. Jeśli tabele mogą się zmniejszać po wzroście, ustaw tę właściwość na false, aby umożliwić ponowne obliczanie poniżej maksymalnego progu.
Na poniższym wykresie pokazano zależność między rozmiarem tabeli a optymalnym rozmiarem pliku parquet. W przypadku tabel poniżej 10 GB środowisko uruchomieniowe platformy Spark ocenia rozmiar pliku docelowego na 128 MB. Wraz ze wzrostem rozmiaru tabeli rozmiar pliku docelowego jest skalowany liniowo, osiągając maksymalnie 1 GB dla tabel przekraczających 10 TB.
Początkowo używając mniejszych plików o rozmiarze 128 MB, a następnie skalując rozmiar plików formatu Parquet w miarę wzrostu rozmiaru tabeli, uzyskuje się kaskadowe korzyści:
Ulepszone pomijanie plików Delta: Pliki o prawidłowym rozmiarze wspierają optymalne klastrowanie i pomijanie danych, co umożliwia protokołowi pomijania plików Delta eliminację większej ilości nieistotnych plików podczas wykonywania zapytania. Mała tabela z plikami o rozmiarze 128 MB zamiast 1 GB umożliwia pomijanie 8 razy większej liczby plików.
Obniżone koszty aktualizacji:
MERGEoperacjeUPDATEzapisują ponownie tylko te pliki, które są dotknięte zmianami. Pliki o odpowiednim rozmiarze minimalizują liczbę plików dotykanych na operację, zmniejszając ilość danych przepisanych. Po włączeniu wektorów usuwania odpowiednie ustalanie rozmiaru plików staje się krytyczne: grobowce na poziomie wiersza w ponadwymiarowych plikach powodują znaczne koszty oczyszczania podczas operacji kompaktowania lub przeczyszczania.Równoległość zoptymalizowana: Pliki o właściwych rozmiarach umożliwiają platformie Spark osiągnięcie idealnego równoległości zadań. Zbyt wiele małych plików przeciąża harmonogram; zbyt mała liczba dużych plików powoduje niedostateczne wykorzystanie puli Spark. Optymalne ustalanie rozmiaru maksymalizuje przepływność odczytu i zapisu.
Adaptacyjny rozmiar pliku docelowego może zwiększyć wydajność kompaktowania o 30–60% i dostarczać szybsze zapytania i zapisy, gdy wybiera bardziej optymalny rozmiar pliku niż domyślny. Jeśli ocena adaptacyjna daje taki sam rozmiar jak domyślna konfiguracja sesji platformy Spark, nie ma oczekiwanej poprawy wydajności.
Ważne
Aby uniknąć zjawiska amplifikacji zapisu — w przypadku gdy zkompresowane pliki są zapisywane ponownie po wzroście adaptacyjnego rozmiaru pliku docelowego w miarę zwiększania się tabeli — włącz cele kompaktowania na poziomie pliku. Ta funkcja uniemożliwia ponowne niepotrzebne kompaktowanie plików już skompaktowanych według wcześniejszych adaptacyjnych rozmiarów docelowych. Aby uzyskać więcej informacji, zobacz dokumentację dotyczącą celów kompaktowania na poziomie plików.
Podsumowanie najlepszych rozwiązań
-
Włącz automatyczne kompaktowanie dla potoków pozyskiwania z częstymi małymi zapisami (przesyłanie strumieniowe lub mikrosadowe), aby uniknąć ręcznego planowania i automatycznie utrzymywać pliki w stanie skompaktowanym.
- W przypadku innych wzorców zapisu korzystne może być włączenie jako ubezpieczenia przed gromadzeniem małych plików, ale rozważ, czy cele poziomu usług przetwarzania danych tolerują okresowe skoki czasu przetwarzania.
- Włącz adaptacyjny rozmiar pliku docelowego , aby usunąć zgadywanie wokół optymalnych rozmiarów plików docelowych.
- Użyj opcji Optymalizuj zapis w kontrolowanych ścieżkach pozyskiwania (zadania wsadowe, które mogą tolerować przetasowanie, scenariusze partycjonowania lub częste małe zapisy), aby zmniejszyć tworzenie małych plików i kosztów konserwacji podrzędnej. Kompaktowanie przed zapisem (optymalizowanie zapisu) zwykle jest mniej kosztowne niż kompaktowanie po zapisie (optymalizowanie).
- Zaplanuj operacje pełnej tabeli
OPTIMIZEpodczas cichych okien , gdy musisz ponownie zapisać wiele partycji lub uruchomić polecenie Z-Order. - Włącz szybką optymalizację, aby zminimalizować wzmocnienie zapisu i zwiększyć idempotentność
OPTIMIZE(zobacz szybką optymalizację). - Użyj
delta.targetFileSizelub najlepiej adaptacyjnego rozmiaru pliku docelowego , aby zachować wartości rozmiaru pliku docelowego spójne między funkcjami układu danych i sesjami platformy Spark. - Włącz cele kompaktowania na poziomie plików, aby zapobiec amplifikacji zapisu w miarę wzrostu tabel i stosowania większych rozmiarów plików docelowych.