Udostępnij za pośrednictwem


Optymalizacja scalania z małą ilością danych w tabelach delty

Polecenie Delta Lake MERGE umożliwia użytkownikom aktualizowanie tabeli delty przy użyciu zaawansowanych warunków. Może aktualizować dane z tabeli źródłowej, widoku lub ramki danych do tabeli docelowej przy użyciu polecenia MERGE. Jednak bieżący algorytm nie jest w pełni zoptymalizowany pod kątem obsługi niezmodyfikowanych wierszy. W przypadku optymalizacji scalania z małą ilością danych niezmodyfikowane wiersze są wykluczone z kosztownej operacji mieszania, która jest wymagana do aktualizowania dopasowanych wierszy.

Dlaczego potrzebujemy funkcji Low Shuffle Merge

Obecnie operacja MERGE jest wykonywana przez dwa wykonania sprzężenia. Pierwsze sprzężenie używa całej tabeli docelowej i danych źródłowych, aby znaleźć listę dotkniętych plików tabeli docelowej, w tym wszystkie dopasowane wiersze. Następnie wykonuje drugie sprzężenie odczytu tylko tych plików i danych źródłowych, aby wykonać rzeczywistą aktualizację tabeli. Mimo że pierwsze sprzężenie polega na zmniejszeniu ilości danych dla drugiego sprzężenia, nadal może istnieć ogromna liczba niezmodyfikowanych wierszy w plikach dotykanych . Pierwsze zapytanie sprzężenia jest lżejsze, ponieważ odczytuje tylko kolumny w danym warunku dopasowania. Druga aktualizacja tabeli musi załadować wszystkie kolumny, co wiąże się z kosztownym procesem mieszania.

Dzięki optymalizacji low Shuffle Merge funkcja Delta tymczasowo utrzymuje zgodny wynik wiersza z pierwszego sprzężenia i wykorzystuje go do drugiego sprzężenia. Na podstawie wyniku wyklucza niezmodyfikowane wiersze z ciężkiego procesu mieszania. Istnieją dwa oddzielne zadania zapisu dla dopasowanych wierszy i niezmodyfikowanych wierszy, co może spowodować 2-krotną liczbę plików wyjściowych w porównaniu z poprzednim zachowaniem. Jednak oczekiwany wzrost wydajności przewyższa możliwy problem z małymi plikami.

Dostępność

Uwaga

  • Funkcja Low Shuffle Merge jest dostępna jako funkcja w wersji zapoznawczej.

Jest ona dostępna w pulach usługi Synapse dla platformy Apache Spark w wersji 3.2 i 3.3.

Wersja Dostępność Wartość domyślna
Delta 0.6 / Spark 2.4 Nie. -
Delta 1.2 / Spark 3.2 Tak fałsz
Delta 2.2 / Spark 3.3 Tak true

Korzyści wynikające z niskiego mieszania scalania

  • Niezmodyfikowane wiersze w plikach dotykowych są obsługiwane oddzielnie i nie przechodzą przez rzeczywistą operację MERGE. Może zaoszczędzić ogólny czas wykonywania scalania i zasoby obliczeniowe. Zysk byłby większy, gdy wiele wierszy jest kopiowanych, a tylko kilka wierszy jest aktualizowanych.
  • Kolejność wierszy jest zachowywana dla niezmodyfikowanych wierszy. W związku z tym pliki wyjściowe niezmodyfikowanych wierszy mogą być nadal wydajne w przypadku pomijania danych, jeśli plik został posortowany lub Z-ORDERED.
  • Byłoby niewielkie obciążenie nawet w przypadku najgorszego przypadku, gdy warunek MERGE pasuje do wszystkich wierszy w plikach dotkniętych.

Jak włączyć i wyłączyć funkcję Scalanie z niskimi mieszania

Po ustawieniu konfiguracji dla puli lub sesji wszystkie wzorce zapisu platformy Spark będą używać funkcji .

Aby użyć optymalizacji low Shuffle Merge, włącz ją przy użyciu następującej konfiguracji:

  1. Scala i PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true

Aby sprawdzić bieżącą wartość konfiguracji, użyj polecenia , jak pokazano poniżej:

  1. Scala i PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled`

Aby wyłączyć tę funkcję, zmień następującą konfigurację, jak pokazano poniżej:

  1. Scala i PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false