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 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Rozmiar pliku docelowego wygenerowany przez OPTIMIZE polecenie . |
1073741824 (1 GB) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE jest idempotentny, ale zbyt duży minFileSize może zwiększyć amplifikację zapisu. Na przykład przy ustawieniu minFileSize na 1 GB plik 900 MB może zostać nadpisany po niewielkiej dodatkowej operacji zapisu. 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. Współlokalizowany układ usprawnia pomijanie plików w przypadku filtrów selektywnych. 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
Możesz połączyć Z-Order i V-Order jednym poleceniem. Platforma Spark stosuje operacje w tej kolejności: kompaktowanie bin → Z-Order → V-Order.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
Zachowanie V-Order podczas OPTIMIZE zależy od sposobu wywołania polecenia:
| Wywołanie | Behavior |
|---|---|
OPTIMIZE table VORDER |
Wymusza porządek V w przepisanych plikach, niezależnie od ustawień sesji lub tabeli. |
OPTIMIZE table (bez VORDER słowa kluczowego) |
Dziedziczy zachowanie V-Order z TBLPROPERTIES("delta.parquet.vorder.enabled"), jeśli jest ustawione; w przeciwnym razie używa konfiguracji sesji spark.sql.parquet.vorder.default. |
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. Zwiększ wartość, aby być bardziej konserwatywną w tym, jak często szybka optymalizacja pomija pojemniki, lub zmniejsz wartość, aby umożliwić bardziej permissywne pomijanie pojemnika.
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 pojemniki, które prawdopodobnie osiągną minimalny rozmiar docelowy lub przekraczają 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')
Zmniejszenie nakładu pracy na ocenę
Począwszy od środowiska uruchomieniowego Spark platformy Fabric w wersji 2.0 (Delta 4.1) można włączyć tryb onCheckpointOnly automatycznej kompaktacji. Domyślnie automatyczne kompaktowanie ocenia metadane plików po każdej operacji zapisu w celu określenia, czy tabela ma zbyt wiele małych plików. W programie onCheckpointOnlyocena jest odroczona w celu rejestrowania operacji tworzenia punktów kontrolnych (zazwyczaj co 10 zatwierdzeń). W czasie punktu kontrolnego migawka tabeli jest już w pełni zrekonstruowana, więc ocena odczytuje dane z metadanych, które są już w pamięci, a nie wymagają dodatkowego skanowania. Odroczone przetwarzanie zmniejsza narzut związany z każdym zatwierdzeniem, a jednocześnie zapewnia okresowe kompaktowanie tabel.