Dynamiczne oczyszczanie plików

Gdy zapytanie łączy dużą tabelę Delta Lake z mniejszą, filtrowaną tabelą, wartości filtrów nie są znane do momentu uruchomienia zapytania. Bez przycinania w czasie działania zapytanie skanuje każdy plik w dużej tabeli, nawet takie, które nie zawierają pasujących wierszy. Dynamiczne usuwanie zbędnych plików rozwiązuje ten problem. W czasie działania optymalizator przesyła wyniki filtra z jednej strony łączenia do skanu tabeli Delta Lake i pomija pliki, które nie mogą zawierać pasujących wierszy.

Domyślnie włączone jest dynamiczne usuwanie plików. Nie musisz zmieniać zapytań, żeby z tego skorzystać.

Gdy dynamiczne przycinanie plików jest stosowane

Dynamiczne przycinanie plików dotyczy tylko operacji JOIN na tabelach Delta Lake. W instrukcji SQL MERGE używa wartości klucza łączenia ze źródła, aby pominąć pliki docelowe, gdy warunek scalania porównuje kolumnę źródłową z kolumną docelową pod kątem równości. W instrukcjach UPDATE i DELETE stosuje się, gdy warunek zawiera podzapytanie, które wykonuje ten sam rodzaj porównania.

Dynamiczne przycinanie plików w instrukcjach MERGE, UPDATE i DELETE wymaga środowiska obliczeniowego z obsługą Photon. W przypadku instrukcji SELECT Photon oferuje szersze i bardziej niezawodne dynamiczne przycinanie plików. Bez Photona dynamiczne przycinanie plików mogłoby nadal dotyczyć SELECT instrukcji, w zależności od kształtu zapytania i planu wykonania. Zobacz Co to jest Photon?.

Dynamiczne przycinanie plików poprawia wydajność głównie dla tabel niepartycjonowanych oraz dla złączeń po kolumnach niepartycjonowanych. Domyślnie uruchamia się tylko wtedy, gdy duża tabela Delta Lake w złączeniu ma co najmniej 10 GB i zawiera co najmniej 10 plików. Zobacz Konfiguracja.

Dynamiczne przycinanie plików również zmniejsza konflikty zapisu. Gdy Delta Lake sprawdza konflikty podczas zatwierdzania, rozpatruje pliki, które dynamiczne przycinanie plików pominęło. Zmniejsza to liczbę nieudanych transakcji. Zobacz Poziomy izolacji i konflikty zapisu.

Najlepsze praktyki

Efekt dynamicznego przycinania plików na wydajność koreluje ze sposobem klastrowania danych. Jeśli wartości, na których łączysz, są rozproszone we wszystkich plikach, dynamiczne przycinanie plików pomija niewiele plików. Aby dynamiczne pruning plików ułatwiło pomijanie większej liczby plików, stosuj następujące praktyki:

  • Stosuj liquid clustering w kolumnach, po których często wykonujesz operacje JOIN, aby pasujące wiersze były umieszczone w mniejszej liczbie plików.
  • Użyj obliczeń z obsługą Photon, których instrukcje MERGE, UPDATE i DELETE wymagają do dynamicznego przycinania plików.

Konfiguracja

Większość obciążeń nie musi zmieniać tych ustawień. Rozważ dostrojenie progów, jeśli połączenie z mniejszą tabelą Delta Lake skorzystałoby na przycinaniu, ale spadnie poniżej domyślnego progu rozmiaru lub liczby plików.

Te właściwości konfiguracyjne Apache Spark kontrolują dynamiczne przycinanie plików:

Property Typ Default Opis
spark.databricks.optimizer.dynamicFilePruning Boolean true Włącza lub wyłącza dynamiczne przycinanie plików.
spark.databricks.optimizer.deltaTableSizeThreshold Long 10000000000 (10 GB) Minimalny rozmiar, w bajtach, dużej tabeli Delta Lake w sprzężeniu, który wywołuje uruchomienie dynamicznego przycinania plików. Dla mniejszej tabeli skanowanie całej tabeli jest zwykle tańsze niż przepychanie filtrów.
Aby znaleźć rozmiar tabeli Delta Lake, uruchom DESCRIBE DETAIL table_name i sprawdź kolumnę sizeInBytes.
spark.databricks.optimizer.deltaTableFilesThreshold Integer 10 Minimalna liczba plików w dużej tabeli Delta Lake w złączeniu wywołującym dynamiczne przycinanie plików. Jeśli tabela ma mniej plików niż ten próg, dynamiczne przycinanie plików nie jest uruchamiane, ponieważ może nie być opłacalne dla tabeli z kilkoma plikami.
Aby znaleźć liczbę plików w tabeli Delta Lake, uruchom DESCRIBE DETAIL table_name i sprawdź kolumnę numFiles.