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.
Pliki tabel Delta stają się fragmentowane w czasie. Fragmentacja zwiększa obciążenie związane z operacją plików, zmniejsza wydajność kompresji i może ograniczyć równoległość czytnika. Kompaktowanie ponownie zapisuje wiele małych plików w mniejszej liczbie plików o odpowiednich rozmiarach, dzięki czemu platforma Spark może wydajniej odczytywać i przetwarzać dane.
Polecenie OPTIMIZE jest podstawową operacją kompaktowania. Grupuje małe pliki w pojemniki dostosowane do idealnego rozmiaru pliku, a następnie zapisuje je ponownie na nośniku.
Aby uzyskać wskazówki dotyczące zwartości między obciążeniami dotyczące strategii kompaktowania w punktach końcowych usługi SQL Analytics, usłudze Power BI Direct Lake i platformie Spark, zobacz Obsługa i optymalizacja tabeli między obciążeniami.
Metody kompaktowania
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 (1g) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Rozmiar pliku docelowego wygenerowany przez OPTIMIZE polecenie . |
1073741824 (1g) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE jest idempotentny, ale zbyt duży minFileSize może zwiększyć amplifikację zapisu. Na przykład z ustawionym minFileSize na 1 GB plik o rozmiarze 900 MB może zostać przepisany po niewielkim dodatkowym zapisie. Aby uzyskać wskazówki dotyczące automatycznego zarządzania rozmiarem plików, zobacz adaptacyjny rozmiar pliku docelowego.
OPTIMIZE z kolejnością Z
W przypadku użycia klauzuli ZORDER BY, OPTIMIZE ponownie zapisuje aktywne pliki, aby wiersze z podobnymi wartościami były umieszczone w tych samych plikach. To ulepsza proces pomijania plików w przypadku selektywnych filtrów. 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 zmniejszyć liczbę przepisanych danych przez cały cykl życia tabeli Delta. Jak pokazano na poniższym diagramie, szybka optymalizacja pomija pojemniki nieoptymalne, co czyni zadania OPTIMIZE szybszymi i bardziej idempotentnymi z mniejszą amplifikacją 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 amplifikację zapisu, ponieważ rozmiar docelowy kompaktowania zmienia się wraz z upływem czasu (na przykład w wyniku oceny adaptacyjnego rozmiaru docelowego pliku i ustawienia 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.
Włącz na poziomie sesji
Ustaw spark.databricks.delta.autoCompact.enabled na poziomie sesji, aby włączyć automatyczne kompaktowanie dla nowych tabel utworzonych w tej sesji platformy Spark:
Włącz na poziomie tabeli
Ustaw właściwość delta.autoOptimize.autoCompact tabeli, aby włączyć automatyczne kompaktowanie dla określonych tabel:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Użyj opcji delta.autoOptimize.autoCompact DataFrameWriter, aby włączyć automatyczne kompaktowanie podczas tworzenia tabeli:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Włącz tę samą właściwość tabeli w istniejącej tabeli:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Dostrajanie progów automatycznej kompresji
Dostosuj zachowanie automatycznego kompaktowania, ustawiając następujące konfiguracje 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 |
Wybierz między automatycznym kompaktowaniem a zaplanowaną optymalizacją
Firma Microsoft zaleca automatyczne kompaktowanie jako domyślną strategię większości obciążeń ładowania danych. Zwykle przewyższa stałe harmonogramy i zmniejsza koszty operacyjne związane z utrzymaniem OPTIMIZE zadań.
Jeśli masz ścisłe cele dotyczące opóźnień, zaplanowanie OPTIMIZE w oddzielnej puli Spark może być bardziej odpowiednie, ponieważ automatyczne kompaktowanie działa synchronicznie po zapisach.
Używaj kompaktowania razem z funkcjami zapobiegania małym plikom, takimi jak optymalizowanie zapisu. Aby uzyskać wskazówki, zobacz Optymalizowanie zapisu.
Utrzymanie tabeli Lakehouse
Możesz uruchamiać operacje konserwacji ad hoc, takie jak OPTIMIZE z poziomu Eksploratora usługi Lakehouse. Aby uzyskać więcej informacji, zobacz Konserwacja tabel lakehouse.
Podsumowanie najlepszych rozwiązań
Skorzystaj z tych zaleceń, aby zrównoważyć koszty zapisu, wydajność odczytu i obciążenie konserwacyjne na potrzeby kompaktowania tabeli delty.
- Enable Auto compaction do pozyskiwania pipelines z częstymi małymi zapisami (przesyłanie strumieniowe lub mikrobatch) w celu zmniejszenia planowania ręcznego.
- Używaj selektywnego auto kompaktowania dla innych wzorców zapisu gdy cele poziomu usługi są w stanie tolerować okazjonalne skoki opóźnień zapisu.
-
Zaplanuj pełną tabelę
OPTIMIZEpodczas cichych okien , gdy trzeba ponownie napisać wiele partycji lub zastosować kolejność Z. -
Włącz szybką optymalizację w celu zmniejszenia wzmacniania zapisu i zwiększenia
OPTIMIZEidempotentności. - Włącz cele kompaktowania na poziomie pliku , aby zmniejszyć niepotrzebne ponowne skompilowanie w miarę zwiększania rozmiaru pliku docelowego w miarę upływu czasu.
- Użyj optymalizacji zapisu w odpowiednich ścieżkach pozyskiwania ponieważ kompaktowanie przed zapisem jest często mniej kosztowne niż kompaktowanie po zapisie. Aby uzyskać wskazówki, zobacz Optymalizowanie zapisu.