Praca z przyłączeniami w usłudze Azure Databricks
Usługa Databricks obsługuje standardową składnię łączenia ANSI. W tym artykule opisano różnice między łączeniami w przetwarzaniu wsadowym i strumieniowym oraz przedstawiono zalecenia dotyczące optymalizacji wydajności łączeń.
Uwaga
Usługa Databricks obsługuje również standardową składnię dla operatorów zestawu UNION
, INTERSECT
i EXCEPT
. Zobacz Set operators (Ustawianie operatorów).
Różnice między sprzężeniami strumieniowymi i wsadowymi
Sprzężenia w usłudze Azure Databricks są stanowe lub bezstanowe.
Wszystkie sprzężenia wsadowe to sprzężenia bezstanowe. Wyniki są przetwarzane natychmiast i odzwierciedlają dane w momencie uruchomienia zapytania. Za każdym razem, gdy zapytanie jest wykonywane, nowe wyniki są obliczane na podstawie określonych danych źródłowych. Zobacz Batch joins (Sprzężenia wsadowe).
Sprzężenia między dwoma źródłami danych przesyłania strumieniowego są stanowe. W stanowych sprzężeniach usługa Azure Databricks śledzi informacje o źródłach danych, a wyniki i iteracyjnie aktualizują wyniki. Sprzężenia stanowe mogą zapewnić zaawansowane rozwiązania do przetwarzania danych online, ale może być trudne do skutecznego wdrożenia. Ma złożoną semantykę operacyjną w zależności od trybu wyjściowego, interwału wyzwalacza i znaku wodnego. Zobacz Stream-stream joins (Sprzężenia strumienia strumienia).
Sprzężenia statyczne strumienia są bezstanowe, ale zapewniają dobrą opcję łączenia przyrostowego źródła danych (takiego jak tabela faktów) ze statycznym źródłem danych (np. wolno zmieniającym się tabelą wymiarową). Zamiast dołączać wszystkie rekordy z obu stron za każdym razem, gdy zapytanie jest wykonywane, tylko nowo odebrane rekordy ze źródła przesyłania strumieniowego są łączone z bieżącą wersją tabeli statycznej. Zobacz Stream-static joins (Sprzężenia statyczne w usłudze Stream).
Sprzężenia wsadowe
pl-PL: Usługa Azure Databricks obsługuje standardową składnię złączeń SQL, w tym złączenia wewnętrzne, zewnętrzne, półzłączenia, antyzłączenia i złączenia krzyżowe. Zobacz JOIN.
Uwaga
Usługa Databricks zaleca użycie zmaterializowanego widoku w celu optymalizacji obliczeń przyrostowych wyników sprzężenia wewnętrznego. Zobacz Używanie widoków materializowanych w Databricks SQL.
Sprzężenia strumienia
Łączenie dwóch źródeł danych przesyłanych strumieniowo może stanowić znaczące wyzwania związane z zarządzaniem informacjami o stanie i rozumowaniem wyników obliczeń i danych wyjściowych. Przed wdrożeniem połączenia strumieniowego, firma Databricks zaleca opracowanie solidnego zrozumienia semantyki operacyjnej dla strumieniowania stanowego, w tym wpływu znaków wodnych na zarządzanie stanem. Odwiedź następujące artykuły:
- Co to jest przesyłanie strumieniowe stanowe?
- Stosowanie znaków wodnych w celu kontrolowania progów przetwarzania danych
- Sprzężenia strumień-strumień
Usługa Databricks zaleca określenie znaków wodnych dla obu stron wszystkich sprzężeń strumieniowo-parowych. Obsługiwane są następujące typy sprzężenia:
- Sprzężenia wewnętrzne
- Lewe sprzężenia zewnętrzne
- Prawe sprzężenia zewnętrzne
- Pełne sprzężenia zewnętrzne
- Lewe sprzężenia częściowe
Zobacz dokumentację przesyłania strumieniowego ze strukturą platformy Apache Spark na sprzężeniach strumieniowo-steam.
Sprzężenia statyczne strumienia
Uwaga
Opisane zachowanie w przypadku sprzężeń statycznych strumieniowych zakłada, że dane statyczne są przechowywane przy użyciu usługi Delta Lake.
Strumieniowe sprzężenie statyczne łączy najnowszą prawidłową wersję tabeli Delta (dane statyczne) z strumieniem danych za pomocą bezstanowego połączenia.
Gdy usługa Azure Databricks przetwarza mikropartie danych podczas strumieniowego sprzężenia statycznego, najnowsza prawidłowa wersja danych ze statycznej tabeli Delta łączy się z rekordami obecnymi w bieżącej mikropartii. Ponieważ sprzężenie jest bezstanowe, nie trzeba konfigurować znakowania wodnego i może przetwarzać wyniki z małym opóźnieniem. Dane w statycznej tabeli delty używanej w sprzężeniu powinny być powoli zmieniane.
W poniższym przykładzie pokazano ten wzorzec:
streamingDF = spark.readStream.table("orders")
staticDF = spark.read.table("customers")
query = (streamingDF
.join(staticDF, streamingDF.customer_id==staticDF.id, "inner")
.writeStream
.option("checkpointLocation", checkpoint_path)
.table("orders_with_customer_info")
)
Optymalizowanie wydajności sprzężenia
Obliczenia z włączoną funkcją Photon zawsze wybierają najlepszy typ sprzężenia. Zobacz Co to jest Photon?.
Korzystanie z najnowszej wersji środowiska Databricks Runtime z włączoną funkcją Photon ogólnie zapewnia dobrą wydajność dołączania, ale należy również wziąć pod uwagę następujące zalecenia:
Sprzężenia krzyżowe są bardzo drogie. Usuń sprzężenia krzyżowe z obciążeń i zapytań, które wymagają małych opóźnień lub częstej ponownej kompilacji.
Kolejność dołączania ma znaczenie. Podczas wykonywania wielu sprzężeń zawsze najpierw połącz najmniejsze tabele, a następnie połącz wynik z większymi tabelami.
Optymalizator może zmagać się z zapytaniami z wieloma sprzężeniami i agregacjami. Zapisywanie wyników pośrednich może przyspieszyć planowanie zapytań i wyniki obliczeń.
Zachowaj świeże statystyki, aby zwiększyć wydajność. Optymalizacja predykcyjna za pomocą
ANALYZE
(publiczna wersja zapoznawcza) może automatycznie aktualizować i utrzymywać statystyki. Możesz również uruchomić zapytanie o nazwieANALYZE TABLE table_name COMPUTE STATISTICS
, aby odświeżyć statystyki w planerze zapytań.
Ważne
Optymalizacja predykcyjna za pomocą ANALYZE
programu jest dostępna w publicznej wersji zapoznawczej. Obejmuje ona inteligentne zbieranie statystyk podczas zapisu. Użyj tego formularza , aby zarejestrować się w publicznej wersji zapoznawczej.
Uwaga
W środowisku Databricks Runtime 14.3 LTS i nowszym można zmodyfikować kolumny, na których usługa Delta Lake zbiera statystyki na potrzeby pomijania danych, a następnie ponownie skompilować istniejące statystyki w dzienniku delty. Zobacz Specyfikację kolumn statystyk Delta.
Wskazówki dotyczące dołączania do usługi Azure Databricks
Platforma Apache Spark obsługuje określanie wskazówek sprzężenia dla sprzężeń zakresu i sprzężeń niesymetrycznych. Wskazówki dotyczące niesymetrycznych sprzężeń nie są konieczne, ponieważ usługa Azure Databricks automatycznie optymalizuje te sprzężenia. Zobacz wskazówki
Wskazówki dotyczące sprzężeń zakresu mogą być przydatne, jeśli wydajność sprzężenia jest niska i wykonujesz sprzężenia z nierównościami. Przykłady obejmują dołączanie do zakresów sygnatur czasowych lub zakres identyfikatorów klastrowania. Zobacz optymalizację sprzężenia zakresu .