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.
Podobnie jak systemy plików i relacyjne bazy danych, dane stają się fragmentowane w czasie, chyba że są ściśle zarządzane, co prowadzi do nadmiernego kosztu obliczeń w celu odczytania danych. Delta Lake nie jest wyjątkiem. Pliki danych powinny być okresowo przepisywane w optymalnym układzie, aby zmniejszyć koszty poszczególnych operacji na plikach, poprawić kompresję danych i zoptymalizować równoległość odczytu. Polecenie OPTIMIZE rozwiązuje to wyzwanie: grupuje małe pliki w partycji w pojemniki przeznaczone dla idealnego rozmiaru pliku i ponownie zapisuje je w pamięci. Wynikiem jest to, że te same dane są kompaktowane w mniej plików.
Metody kompaktowania
Usługa Microsoft Fabric oferuje kilka metod utrzymania optymalnych rozmiarów plików w tabelach delty:
OPTIMIZE polecenie
Polecenie OPTIMIZE to fundamentalna operacja kompaktująca tabelę Delta. Ponownie zapisuje małe pliki w większych plikach, aby poprawić układ danych w tabelach delty.
| Majątek | Description | Wartość domyślna | Konfiguracja sesji |
|---|---|---|---|
| minFileSize | Pliki, które są mniejsze niż ten próg, są grupowane razem i ponownie pisane jako większe pliki. | 1073741824 (1 g) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Rozmiar pliku docelowego wygenerowany przez OPTIMIZE polecenie . |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
Ważne
Chociaż OPTIMIZE jest operacją idempotentną (co oznacza, że uruchomienie jej dwa razy z rzędu nie powoduje ponownego zapisania żadnych danych), użycie minFileSize o rozmiarze większym niż rozmiar tabeli Delta może spowodować amplifikację zapisu, co czyni operację bardziej kosztowną obliczeniowo niż jest to konieczne. Jeśli na przykład minFileSize jest ustawione na 1 GB i w tabeli znajduje się plik o rozmiarze 900 MB, to ten plik zostanie przepisany, gdy OPTIMIZE zostanie uruchomiony po tym, jak do tabeli zostanie zapisany mały plik o rozmiarze 1 KB. Aby uzyskać wskazówki dotyczące automatycznego zarządzania rozmiarem pliku, zobacz dokumentację adaptacyjnego rozmiaru pliku docelowego .
OPTIMIZE z kolejnością Z
Po określeniu klauzuli ZORDER BY, OPTIMIZE ponownie zapisuje wszystkie aktywne pliki, tak aby wiersze z podobnymi wartościami dla kolumn z-order były umieszczane razem w tych samych plikach, co zwiększa skuteczność pomijania plików dla zapytań filtrujących te kolumny. Użyj opcji Z-Order, gdy:
- Zapytania często filtrują co najmniej dwie kolumny (na przykład daty i customer_id) i
- Te predykaty są wystarczająco selektywne, że pomijanie na poziomie plików zmniejsza liczbę skanowanych plików.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE z V-Order
Klauzula VORDER powoduje, że pliki objęte zakresem dla kompaktowania mają zastosowaną optymalizację V-Order. Aby uzyskać więcej informacji na temat V-Order, zobacz szczegółową dokumentację.
OPTIMIZE dbo.table_name VORDER
OPTIMIZE z klastrowaniem płynnym
Klastrowanie Liquid jest określane jako opcja tabeli; Więcej informacji znajdziesz w włączaniu klastrowania Liquid. Po włączeniu klastrowania, OPTIMIZE wykonuje fizyczne ponowne zapisywanie, które stosuje politykę klastrowania.
Ważne
Dane są klastrowane tylko wtedy, gdy OPTIMIZE jest uruchamiane w tabelach z włączoną obsługą klastra liquid. Regularne operacje zapisu NIE klasterują danych. Posiadanie strategii kompaktowania, takiej jak używanie automatycznego kompaktowania lub ręczne planowanie zadań optymalizacji, ma kluczowe znaczenie dla zapewnienia, że można zrealizować zalety klastrowanych danych (czyli ulepszone pomijanie plików Delta).
Szybka optymalizacja
Szybka optymalizacja inteligentnie analizuje pliki tabeli delty i pomija operacje kompaktowania, które prawdopodobnie nie poprawią wydajności.
Zamiast niewidomie kompaktować pliki zawsze, gdy istnieją małe pliki, szybka optymalizacja ocenia, czy każdy pojemnik kandydata (grupa małych plików) spełnia konfigurowalne cele kompaktowania najlepszych rozwiązań. Szybka Optymalizacja uruchamia kompaktowanie tylko dla grupy plików, jeśli scalanie ich prawdopodobnie osiągnie minimalny zakładany rozmiar lub jeśli jest zbyt wiele małych plików. W przeciwnym razie pomija tę grupę lub zmniejsza liczbę plików, które kompaktuje.
Szybka optymalizacja może być dostrojona w oparciu o oczekiwania dotyczące kompaktowania:
| Majątek | Description | Wartość domyślna | Konfiguracja sesji |
|---|---|---|---|
| minNumFiles | Liczba małych plików, które muszą być obecne w pojemniku, aby możliwe było przeprowadzenie optymalizacji, jeśli pojemnik nie zawiera wystarczającej ilości danych do oszacowanego utworzenia skompaktowanego pliku. | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| parquetCoefficient | Pomnożony przez minimalny rozmiar pliku zdefiniowany w kontekście optymalizacji w celu określenia minimalnej ilości danych małych plików, które muszą istnieć w koszu, aby kosz został uwzględniony w zakresie kompaktowania. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Uwaga / Notatka
parquetCoefficient powoduje, że docelowy rozmiar pojemnika jest większy niż minimalny rozmiar docelowy pliku w kontekście optymalizacji. Ten współczynnik uwzględnia fakt, że połączenie wielu małych plików parquet skutkuje lepszą kompresją i w efekcie mniejszą ilością danych niż suma tych małych plików. Można zwiększyć tę wartość, aby bardziej konserwatywnie decydować o częstotliwości pomijania pojemników przez szybką optymalizację, lub ją zmniejszyć, aby umożliwić bardziej swobodne pomijanie pojemników.
Jak to działa
Funkcja szybkiej optymalizacji wprowadza dodatkowe kontrole przed kompaktowaniem pojemników. W przypadku każdego pojemnika kandydata szybka optymalizacja ocenia:
- Szacowana ilość danych pierwotnych w pojemniku (suma małych rozmiarów plików)
- Czy łączenie małych plików jest szacowane w celu utworzenia pliku spełniającego skonfigurowany minimalny rozmiar docelowy
- Czy pojemnik zawiera co najmniej skonfigurowaną minimalną liczbę małych plików
Szybka optymalizacja ocenia każdy pojemnik małych plików i kompaktuje tylko małe pliki, które mogą osiągnąć minimalny rozmiar docelowy lub przekroczyć minimalną liczbę plików. Pojemniki, które nie spełniają tych progów, są pomijane lub częściowo kompresowane. Pomijanie nieoptymalnych pojemników zmniejsza niepotrzebne ponowne zapisywanie, obniża wzmacnianie zapisu i sprawia, że zadania OPTIMIZE są bardziej idempotentne.
Uwaga / Notatka
Dokładna implementacja może ewoluować wraz z upływem czasu.
Szybka optymalizacja może spowodować, że w cyklu życia tabel różnicowych przepisuje się mniej danych. Jak pokazano na poniższym diagramie, szybka optymalizacja pomija kompaktowanie nieoptymalnych pojemników. W rezultacie szybciej wykonywane i bardziej idempotentne są zadania OPTIMIZE, a także następuje redukcja wzmocnienia zapisu.
Uwaga / Notatka
Tylko w celach ilustracyjnych powyższe diagramy zakładają, że rozmiar pliku zapisanego z kompaktowania jest sumą rozmiaru małych plików. To również oznacza parquetCoefficient wartość 1.
Ograniczenia
- Nie dotyczy klastrowania liquid i operacji Z-Order
- Szybka optymalizacja nie modyfikuje zachowania autokompaktacji
Cele kompaktowania na poziomie plików
Aby uniknąć ponownego zapisywania danych, które zostały wcześniej uznane za kompaktowane (wystarczająco duże) na podstawie zmiany wartości minimalnych i maksymalnych docelowych rozmiaru pliku, spark.microsoft.delta.optimize.fileLevelTarget.enabled można włączyć, aby zapobiec ponownemu kompaktowaniu już skompaktowanych plików. Po włączeniu pliki nie są ponownie rekompaktowane, jeśli wcześniej spełniały co najmniej połowę rozmiaru pliku docelowego podczas kompaktowania. Utrzymywanie celów na poziomie pliku minimalizuje wzmocnienie zapisu, ponieważ rozmiar docelowy kompaktowania zmienia się z czasem (na przykład poprzez ocenę adaptacyjnego rozmiaru docelowego pliku i ustawienie większego celu). Jeśli ta opcja jest włączona, tag OPTIMIZE_TARGET_SIZE zostanie dodany do nowych plików podczas uruchamiania funkcji OPTIMIZE lub w przypadku każdej operacji zapisu, jeśli właściwość delta.targetFileSize lub delta.targetFileSize.adaptive tabeli jest ustawiona.
Uwaga / Notatka
Mimo że nie jest domyślnie włączona, firma Microsoft zaleca włączenie celów kompaktowania na poziomie plików w celu ograniczenia potencjalnego wzmacniania zapisu.
Automatyczne kompaktowanie
Automatyczne kompaktowanie 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 sterowane przez autora do utrzymania plików jest optymalne, ponieważ kompaktowanie odbywa się tylko wtedy, gdy zostanie ocenione programowo jako korzystne.
Ustaw na poziomie sesji, aby włączyć automatyczne kompaktowanie w nowych tabelach:
Ustaw na poziomie tabeli, aby włączyć tylko dla wybranych tabel:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Użyj opcji DataFrameWriter, aby włączyć w nowych tabelach:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Włącz dla istniejących tabel:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Działanie automatycznego kompaktowania można dostosować za pomocą następujących konfiguracji sesji Spark.
| Majątek | Description | Wartość domyślna | Konfiguracja sesji |
|---|---|---|---|
| maxFileSize | Docelowy maksymalny rozmiar pliku w bajtach dla skompaktowanych plików. | 134217728b (128 MB) | spark.databricks.delta.autoCompact.maxFileSize |
| minFileSize | Minimalny rozmiar pliku w bajtach, który ma zostać uznany za zwarty. Wszystkie elementy poniżej tego progu są brane pod uwagę w przypadku kompaktowania i liczone do minNumFiles progu. |
Domyślnie brak ustawienia, obliczane jako 1/2 wartości maxFileSize, chyba że jawnie ustawisz wartość. |
spark.databricks.delta.autoCompact.minFileSize |
| minNumFiles | Minimalna liczba plików, które muszą istnieć poniżej minFileSize progu wyzwalania automatycznego kompaktowania. |
50 | spark.databricks.delta.autoCompact.minNumFiles |
Uwaga / Notatka
Microsoft zaleca używanie automatycznego kompaktowania zamiast planowania OPTIMIZE zadań. Automatyczne procesy kompaktowania zwykle przewyższają zaplanowane procesy kompaktowania pod względem maksymalizacji wydajności odczytu/zapisu i często eliminują obciążenie związane z kodowaniem, planowaniem i optymalizowaniem częstotliwości uruchamiania tych zaplanowanych procesów. Automatyczne kompaktowanie jest zalecane, gdy cele poziomu usługi przetwarzania danych tolerują dodatkowe opóźnienia z automatycznego kompaktowania uruchamianego, gdy jest to potrzebne. Jeśli wymagania dotyczące opóźnienia danych są rygorystyczne, bardziej efektywne może być zaplanowanie uruchamiania optymalizacji w oddzielnej puli Spark, dzięki czemu operacje zapisu nie doświadczą okresowych skoków ze względu na wyzwalanie synchronicznych operacji kompaktowania.
Ważne
Chociaż kompaktowanie jest strategią krytyczną do użycia, należy ją również odpowiednio sparować z unikaniem zapisywania małych plików za pośrednictwem funkcji, takich jak optymalizacja zapisu. Aby uzyskać więcej informacji, zobacz wskazówki dotyczące optymalizowania zapisu.
Utrzymanie tabeli Lakehouse
Użytkownicy mogą uruchamiać operacje konserwacji ad hoc, takie jak OPTIMIZE z interfejsu użytkownika usługi Lakehouse. Aby uzyskać więcej informacji, zobacz Konserwacja tabel lakehouse.
Podsumowanie najlepszych rozwiązań
-
Włącz automatyczne kompaktowanie dla pipeline'ów pobierania danych z częstymi małymi zapisami (przesyłanie strumieniowe lub mikrobatch), aby uniknąć ręcznego planowania i by pliki były kompaktowane automatycznie.
- 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.
- Zaplanuj operacje pełnej tabeli
OPTIMIZEpodczas cichych okien , gdy trzeba ponownie zapisać wiele partycji lub uruchomić polecenie Z-Order. - Włącz szybką optymalizację w celu zmniejszenia wzmacniania zapisu i zwiększenia
OPTIMIZEidempotentności. - 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.
- Pamiętaj, że kompaktowanie wstępne (optymalizowanie zapisu) jest mniej kosztowne niż kompaktowanie po zapisie (optymalizowanie). Zobacz dokumentację optymalizacji zapisu, aby uzyskać najlepsze praktyki.