Rozwiązywanie problemów z zapytaniami usługi Azure Stream Analytics

W tym artykule opisano typowe problemy z opracowywaniem zapytań usługi Azure Stream Analytics, sposobem rozwiązywania problemów z zapytaniami i rozwiązywaniem problemów. Wiele kroków rozwiązywania problemów wymaga włączenia dzienników zasobów dla zadania usługi Stream Analytics. Jeśli nie masz włączonych dzienników zasobów, zobacz Rozwiązywanie problemów z Azure Stream Analytics przy użyciu dzienników zasobów.

Zapytanie nie generuje oczekiwanego wyniku

  1. Sprawdź błędy, testując lokalnie:

  2. Debugowanie zapytań krok po kroku przy użyciu diagramu zadań w narzędziach usługi Azure Stream Analytics dla programu Visual Studio Code. Diagram zadania pokazuje, jak dane przepływają ze źródeł wejściowych, na przykład z usług Azure Event Hubs i Azure IoT Hub, przez wiele etapów zapytań, a ostatecznie do ujść wyjściowych. Skrypt mapuje każdy krok zapytania na tymczasowy zestaw wyników, który definiujesz za pomocą instrukcji WITH. Zobacz dane i metryki w każdym zestawie wyników pośrednich, aby znaleźć źródło problemu.

    Zrzut ekranu diagramu zadań w Visual Studio Code pokazujący wynik podglądu dla kroku zapytania.

  3. Jeśli używasz opcji Znacznik czasu według, sprawdź, czy zdarzenia mają znaczniki czasu późniejsze niż czas rozpoczęcia zadania.

  4. Eliminowanie typowych pułapek, takich jak:

    • Klauzula WHERE w zapytaniu filtrowała wszystkie zdarzenia, więc zapytanie nie generuje żadnego wyjścia.
    • Funkcja CAST kończy się niepowodzeniem, powodując niepowodzenie zadania. Aby uniknąć błędów rzutowania typów, użyj TRY_CAST zamiast tego.
    • Gdy używasz funkcji okna, poczekaj na cały czas trwania okna, aby wyświetlić dane wyjściowe zapytania.
    • Znacznik czasu dla zdarzeń poprzedza moment rozpoczęcia zadania, więc zadanie usuwa zdarzenia.
    • Warunki JOIN nie są zgodne. Jeśli nie ma dopasowań, zapytanie nie generuje żadnego wyjścia.
  5. Upewnij się, że konfigurujesz polityki kolejności zdarzeń zgodnie z oczekiwaniami. Przejdź do pozycji Ustawienia i wybierz pozycję Kolejność zdarzeń. Przycisk Test nie stosuje polityki podczas testowania zapytania. Ten wynik to jedna z różnic między testowaniem w przeglądarce a uruchamianiem zadania w produkcji.

  6. Debugowanie przy użyciu dzienników aktywności i zasobów:

    • Użyj dzienników aktywności i filtruj, aby zidentyfikować i debugować błędy.
    • Użyj dzienników zasobów zadania, aby zidentyfikować i debugować błędy.

Debug queries progressively (Stopniowe debugowanie zapytań)

W przetwarzaniu danych w czasie rzeczywistym pomaga wiedzieć, jak wyglądają dane w trakcie zapytania. Aby zobaczyć dane pośrednie, użyj diagramu zadań w Visual Studio. Jeśli nie masz Visual Studio, możesz podjąć dodatkowe kroki, aby wypisać dane pośrednie.

Ponieważ Azure Stream Analytics może wielokrotnie odczytywać dane wejściowe lub kroki zadania, możesz pisać dodatkowe SELECT INTO instrukcje. Dzięki temu dane pośrednie trafiają do pamięci i pozwalają sprawdzić poprawność danych, tak jak zmienne zegarka podczas debugowania programu.

Poniższe przykładowe zapytanie w zadaniu usługi Azure Stream Analytics ma jedno wejście strumieniowe, dwa wejścia danych referencyjnych oraz jedno wyjście do usługi Azure Table Storage. Zapytanie łączy dane z centrum zdarzeń z danymi z dwóch referencyjnych obiektów blob, aby uzyskać informacje o nazwie i kategorii:

Zrzut ekranu przykładowego zapytania Stream Analytics, które łączy wejście do centrum zdarzeń z dwoma referencyjnymi blobami za pomocą SELECT INTO.

Zadanie jest uruchomione, ale nie generuje żadnych zdarzeń na wyjściu. Na kafelku Monitoring, pokazanym tutaj, widać, że na wejściu są generowane dane, ale nie wiesz, który krok operacji JOIN odrzucił wszystkie zdarzenia.

Zrzut ekranu kafelka Stream Analytics Monitoring pokazuje odebrane zdarzenia wejściowe, podczas gdy nie generowane są żadne zdarzenia wyjściowe.

W takiej sytuacji możesz dodać kilka dodatkowych SELECT INTO instrukcji, aby "logować" wyniki pośrednie JOIN oraz dane odczytywane z wejścia.

W tym przykładzie dodaliśmy dwa nowe "tymczasowe wyjścia". Mogą być dowolnym zlewem, jaki chcesz. W tym miejscu użyjemy usługi Azure Storage jako przykładu:

Zrzut ekranu zapytania Stream Analytics z dodatkowymi instrukcjami SELECT INTO dodanymi do logowania wyników pośrednich do pamięci.

Następnie możesz ponownie napisać zapytanie w następujący sposób:

Zrzut ekranu przepisanego zapytania Stream Analytics, które kieruje pośrednie wyniki operacji JOIN do tymczasowych danych wyjściowych.

Teraz uruchom zadanie ponownie i pozostaw je w działaniu przez kilka minut. Następnie zapytaj temp1 i temp2 za pomocą Visual Studio Cloud Explorer wygeneruj następujące tabele:

tabela temp1Zrzut ekranu tabeli temp1 pokazujący pośrednie wyniki JOIN z zapytania Stream Analytics.

tabela temp2Zrzut ekranu tabeli temp2 pokazująca kolumnę nazw poprawnie wypełnioną z zapytania Stream Analytics.

Jak widać, temp1 i temp2 oba zawierają dane, a kolumna name jest poprawnie wypełniona w elemencie temp2. Jednak ponieważ wynik nadal nie zawiera danych, coś jest nie tak:

Zrzut ekranu tabeli output1 pokazujący, że zapytanie Stream Analytics nie zwraca danych zwrotnych.

Próbkując dane, można być niemal pewnym, że problem leży w drugim JOIN. Możesz pobrać dane referencyjne z bloba i je przejrzeć:

Zrzut ekranu tabeli danych referencyjnych pokazujący format GUID różniący się od kolumny from w temp2.

Jak widać, format GUID w tych danych referencyjnych różni się od formatu kolumny [from] w temp2. Dlatego dane nie dotarły do output1 zgodnie z oczekiwaniami.

Popraw format danych, prześlij go do referencyjnego blobu i spróbuj ponownie:

Zrzut ekranu tabeli danych referencyjnych po poprawieniu formatu GUID i przesłaniu do referencyjnego blobu.

Tym razem dane w danych wyjściowych są formatowane i wypełniane zgodnie z oczekiwaniami.

Zrzut ekranu tabeli wyjściowej pokazujący dane sformatowane i wypełnione zgodnie z oczekiwaniami w zapytaniu Stream Analytics.

Wysokie wykorzystanie zasobów

Upewnij się, że korzystasz z równoległości w usłudze Azure Stream Analytics. Naucz się skalować z równoległością zapytań w zadaniach Stream Analytics, konfigurując partycje wejściowe i dostosowując definicję zapytań analitycznych.

Jeśli wykorzystanie zasobów stale trwa ponad 80%, opóźnienie limitu rośnie, a liczba zdarzeń zaległych rośnie, rozważ zwiększenie liczby jednostek przesyłania strumieniowego. Wysokie wykorzystanie wskazuje, że zadanie używa blisko maksymalnych przydzielonych zasobów.

Uzyskaj pomoc

Aby uzyskać dalszą pomoc, wypróbuj stronę pytań i odpowiedzi firmy Microsoft dotyczącą usługi Azure Stream Analytics.