Plan zapytania dla dodatku Power Query (wersja zapoznawcza)
Plan zapytania dla dodatku Power Query to funkcja, która zapewnia lepszy widok oceny zapytania. Warto pomóc w ustaleniu, dlaczego określone zapytanie może nie składać się w określonym kroku.
W praktycznym przykładzie w tym artykule przedstawiono główny przypadek użycia i potencjalne korzyści wynikające z używania funkcji planu zapytania w celu przejrzenia kroków zapytania. Przykłady użyte w tym artykule zostały utworzone przy użyciu przykładowej bazy danych AdventureWorksLT dla programu Azure SQL Server, którą można pobrać z przykładowych baz danych AdventureWorks.
Uwaga
Funkcja planu zapytania dla dodatku Power Query jest dostępna tylko w usłudze Power Query Online.
Ten artykuł został podzielony w serii zalecanych kroków w celu zinterpretowania planu zapytania. Te kroki są następujące:
- Przejrzyj wskaźniki składania zapytań.
- Wybierz krok zapytania, aby przejrzeć jego plan zapytania.
- Zaimplementuj zmiany w zapytaniu.
Wykonaj poniższe kroki, aby utworzyć zapytanie we własnym środowisku usługi Power Query Online.
W dodatku Power Query — wybierz źródło danych, wybierz pozycję Puste zapytanie.
Zastąp skrypt pustego zapytania następującym zapytaniem.
let Source = Sql.Database("servername", "database"), Navigation = Source{[Schema = "Sales", Item = "SalesOrderHeader"]}[Data], #"Removed other columns" = Table.SelectColumns(Navigation, {"SalesOrderID", "OrderDate", "SalesOrderNumber", "PurchaseOrderNumber", "AccountNumber", "CustomerID", "TotalDue"}), #"Filtered rows" = Table.SelectRows(#"Removed other columns", each [TotalDue] > 1000), #"Kept bottom rows" = Table.LastN(#"Filtered rows", 5) in #"Kept bottom rows"
Zmień
servername
idatabase
przy użyciu poprawnych nazw dla własnego środowiska.(Opcjonalnie) Jeśli próbujesz nawiązać połączenie z serwerem i bazą danych dla środowiska lokalnego, pamiętaj o skonfigurowaniu bramy dla tego środowiska.
Wybierz Dalej.
W Edytor Power Query wybierz pozycję Konfiguruj połączenie i podaj poświadczenia do źródła danych.
Uwaga
Aby uzyskać więcej informacji na temat nawiązywania połączenia z programem SQL Server, przejdź do bazy danych programu SQL Server.
Po wykonaniu tych kroków zapytanie będzie wyglądać jak na poniższej ilustracji.
To zapytanie łączy się z tabelą SalesOrderHeader i wybiera kilka kolumn z ostatnich pięciu zamówień z wartością TotalDue powyżej 1000.
Uwaga
W tym artykule użyto uproszczonego przykładu do zaprezentowania tej funkcji, ale pojęcia opisane w tym artykule dotyczą wszystkich zapytań. Zalecamy, aby przed przeczytaniem planu zapytania dobrze się zapoznać z składaniem zapytań. Aby dowiedzieć się więcej na temat składania zapytań, przejdź do artykułu Podstawy składania zapytań.
Uwaga
Przed przeczytaniem tej sekcji zalecamy zapoznanie się z artykułem dotyczącym wskaźników składania zapytań.
Pierwszym krokiem w tym procesie jest przejrzenie zapytania i zwrócenie uwagi na wskaźniki składania zapytań. Celem jest przejrzenie kroków oznaczonych jako nieskładane. Następnie możesz sprawdzić, czy wprowadzanie zmian w ogólnym zapytaniu może spowodować całkowite składanie tych przekształceń.
W tym przykładzie jedynym krokiem, którego nie można składać, jest Zachowano dolne wiersze, co jest łatwe do zidentyfikowania za pomocą nieskładanego wskaźnika kroku. Ten krok jest również ostatnim krokiem zapytania.
Teraz celem jest przejrzenie tego kroku i zrozumienie, co jest składane z powrotem do źródła danych i czego nie można złożyć.
Krok Zachowano dolne wiersze został zidentyfikowany jako krok zainteresowania, ponieważ nie jest on składany z powrotem do źródła danych. Kliknij prawym przyciskiem myszy krok i wybierz opcję Wyświetl plan zapytania. Ta akcja powoduje wyświetlenie nowego okna dialogowego zawierającego diagram planu zapytania wybranego kroku.
Dodatek Power Query próbuje zoptymalizować zapytanie, korzystając z leniwej oceny i składania zapytań, jak wspomniano w temacie Podstawy składania zapytań. Ten plan zapytania reprezentuje zoptymalizowane tłumaczenie zapytania M na zapytanie natywne wysyłane do źródła danych. Obejmuje również wszelkie przekształcenia wykonywane przez aparat Power Query. Kolejność, w jakiej węzły są wyświetlane, jest zgodna z kolejnością zapytania rozpoczynającą się od ostatniego kroku lub danych wyjściowych zapytania, które jest reprezentowane po lewej stronie diagramu, a w tym przypadku jest to węzeł Table.LastN , który reprezentuje krok Przechowywane dolne wiersze .
W dolnej części okna dialogowego znajduje się pasek z ikonami, które ułatwiają powiększanie lub wyłączanie widoku planu zapytania oraz inne przyciski ułatwiające zarządzanie widokiem. Na poprzedniej ilustracji opcja Dopasuj do wyświetlenia z tego paska została użyta do lepszego doceninia węzłów.
Uwaga
Plan zapytania reprezentuje zoptymalizowany plan. Gdy aparat ocenia zapytanie, próbuje złożyć wszystkie operatory w źródle danych. W niektórych przypadkach może nawet wykonać pewne wewnętrzne zmiany kolejności kroków w celu zmaksymalizowania składania. Mając to na uwadze, węzły/operatory pozostawione w tym zoptymalizowanym planie zapytania zwykle zawierają zapytanie "złożone" źródła danych i wszystkie operatory, których nie można składać i są oceniane lokalnie.
Węzły na tym diagramie można zidentyfikować jako dwie grupy:
- Złożone węzły: ten węzeł może być
Value.NativeQuery
węzłem lub węzłami "źródła danych", takimi jakSql.Database
. Można je również zidentyfikować za pomocą etykiety zdalnej pod nazwą funkcji. - Nieskładane węzły: inne operatory tabeli, takie jak
Table.SelectRows
,Table.SelectColumns
i inne funkcje, których nie można składać. Można je również zidentyfikować za pomocą etykiet Pełne skanowanie i przesyłanie strumieniowe.
Na poniższej ilustracji przedstawiono złożone węzły wewnątrz czerwonego prostokąta. Nie można składać pozostałych węzłów z powrotem do źródła danych. Należy przejrzeć pozostałe węzły, ponieważ celem jest próba złożenia tych węzłów z powrotem do źródła danych.
Możesz wybrać pozycję Wyświetl szczegóły w dolnej części niektórych węzłów, aby wyświetlić informacje rozszerzone. Na przykład szczegóły węzła Value.NativeQuery
pokazują zapytanie natywne (w języku SQL), które zostanie wysłane do źródła danych.
Przedstawione tutaj zapytanie może nie być dokładnie tym samym zapytaniem wysłanym do źródła danych, ale jest to dobre przybliżenie. W tym przypadku informuje o dokładnie tym, jakie kolumny będą odpytywane z tabeli SalesOrderHeader, a następnie jak będzie filtrować tę tabelę przy użyciu pola TotalDue, aby uzyskać tylko wiersze, w których wartość tego pola jest większa niż 1000. Węzeł obok niego Table.LastN jest obliczany lokalnie przez aparat Power Query, ponieważ nie można go składać.
Uwaga
Operatory mogą nie być dokładnie zgodne z funkcjami używanymi w skryscie zapytania.
Określono, które węzły nie mogą być składane i będą oceniane lokalnie. Ten przypadek ma Table.LastN
tylko węzeł, ale w innych scenariuszach może mieć o wiele więcej.
Celem jest zastosowanie zmian w zapytaniu, aby można było składać krok. Niektóre zmiany, które można zaimplementować, mogą wahać się od zmiany kolejności kroków w celu zastosowania alternatywnej logiki do zapytania, które jest bardziej jawne dla źródła danych. Nie oznacza to, że wszystkie zapytania i wszystkie operacje można składać, stosując pewne zmiany. Dobrym rozwiązaniem jest jednak ustalenie przez próbę i błąd, jeśli zapytanie może zostać złożone z powrotem.
Ponieważ źródło danych jest bazą danych programu SQL Server, jeśli celem jest pobranie ostatnich pięciu zamówień z tabeli, dobrym rozwiązaniem jest skorzystanie z klauzul TOP i ORDER BY w języku SQL. Ponieważ w języku SQL nie ma klauzuli BOTTOM, Table.LastN
nie można przetłumaczyć przekształcenia w usłudze PowerQuery na język SQL. Możesz usunąć Table.LastN
krok i zastąpić go:
- Sortuj malejąco według kolumny SalesOrderID w tabeli, ponieważ ta kolumna określa, która kolejność jest najpierw i która została wprowadzona ostatnio.
- Wybierz pięć pierwszych wierszy od posortowania tabeli. Ta transformacja wykonuje to samo, co w przypadku, gdy była to zachowana dolna liczba wierszy (
Table.LastN
).
Ta alternatywa jest równoważna oryginalnemu zapytaniu. Chociaż ta alternatywa w teorii wydaje się dobra, musisz wprowadzić zmiany, aby sprawdzić, czy ten alternatywny element sprawi, że ten węzeł zostanie w pełni złożony ze źródła danych.
Zaimplementuj alternatywę omówiną w poprzedniej sekcji:
Zamknij okno dialogowe planu zapytania i wróć do Edytor Power Query.
Usuń krok Przechowywane dolne wiersze.
Sortuj kolumnę SalesOrderID w kolejności malejącej.
Wybierz ikonę tabeli w lewym górnym rogu widoku podglądu danych i wybierz opcję Zachowaj pierwsze wiersze. W oknie dialogowym przekaż liczbę pięć jako argument i naciśnij przycisk OK.
Po zaimplementowaniu zmian ponownie sprawdź wskaźniki składania zapytań i sprawdź, czy daje on zwinięty wskaźnik.
Teraz nadszedł czas, aby przejrzeć plan zapytania ostatniego kroku, który jest teraz Zachowaj pierwsze wiersze. Teraz istnieją tylko złożone węzły. Wybierz pozycję Wyświetl szczegóły w obszarze Value.NativeQuery
, aby sprawdzić, które zapytanie jest wysyłane do bazy danych.
Chociaż ten artykuł sugeruje, jaka alternatywa ma być stosowana, głównym celem jest zapoznanie się z planem zapytania w celu zbadania składania zapytań. W tym artykule przedstawiono również informacje o tym, co jest wysyłane do źródła danych i jakie przekształcenia zostaną wykonane lokalnie.
Możesz dostosować kod, aby zobaczyć wpływ, jaki ma on w zapytaniu. Korzystając ze wskaźników składania zapytań, lepiej zrozumiesz, które kroki uniemożliwiają składanie zapytania.