Udostępnij za pośrednictwem


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

W tym artykule opisano typowe problemy z opracowywaniem zapytań usługi Stream Analytics i sposobem ich rozwiązywania.

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 usługą Azure Stream Analytics przy użyciu dzienników zasobów.

Zapytanie nie generuje oczekiwanych danych wyjściowych

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

    • W witrynie Azure Portal na karcie Zapytanie wybierz pozycję Testuj. Użyj pobranych przykładowych danych, aby przetestować zapytanie. Sprawdź wszelkie błędy i spróbuj je poprawić.
    • Zapytanie można również przetestować lokalnie przy użyciu narzędzi usługi Azure Stream Analytics dla programu Visual Studio lub Visual Studio Code.
  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 przedstawia przepływ danych ze źródeł wejściowych (centrum zdarzeń, centrum IoT Hub itp.) za pomocą wielu kroków zapytania, a na koniec do ujścia danych wyjściowych. Każdy krok zapytania jest mapowany na tymczasowy zestaw wyników zdefiniowany w skrypcie przy użyciu instrukcji WITH. Możesz wyświetlić dane, a także metryki, w każdym zestawie wyników pośrednich, aby znaleźć źródło problemu.

    Wynik podglądu diagramu zadań

  3. Jeśli używasz znacznika czasu według, sprawdź, czy zdarzenia mają znaczniki czasu większe niż czas rozpoczęcia zadania.

  4. Eliminowanie typowych pułapek, takich jak:

    • Klauzula WHERE w zapytaniu odfiltrowała wszystkie zdarzenia, uniemożliwiając generowanie danych wyjściowych.
    • 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.
    • Sygnatura czasowa zdarzeń poprzedza godzinę rozpoczęcia zadania i porzucone zdarzenia.
    • Warunki JOIN nie są zgodne. Jeśli nie ma dopasowań, nie będzie żadnych danych wyjściowych.
  5. Upewnij się, że zasady porządkowania zdarzeń są skonfigurowane zgodnie z oczekiwaniami. Przejdź do pozycji Ustawienia i wybierz pozycję Kolejność zdarzeń. Zasady nie są stosowane podczas testowania zapytania za pomocą przycisku Testuj. Jest to jedna różnica między testowaniem w przeglądarce a uruchomieniem zadania w środowisku produkcyjnym.

  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.

Wysokie wykorzystanie zasobów

Upewnij się, że korzystasz z równoległości w usłudze Azure Stream Analytics. Możesz nauczyć się skalować przy użyciu równoległości zapytań zadań usługi Stream Analytics, konfigurując partycje wejściowe i dostrajają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.

Debug queries progressively (Stopniowe debugowanie zapytań)

Podczas przetwarzania danych w czasie rzeczywistym wiedza na temat wyglądu danych w środku zapytania może być przydatna. Można to zobaczyć przy użyciu diagramu zadań w programie Visual Studio. Jeśli nie masz programu Visual Studio, możesz wykonać dodatkowe kroki w celu wyprowadzenia danych pośrednich.

Ponieważ dane wejściowe lub kroki zadania usługi Azure Stream Analytics można odczytać wiele razy, możesz napisać dodatkowe instrukcje SELECT INTO. Dzięki temu dane pośrednie są zwracane do magazynu i umożliwiają inspekcję poprawności danych, podobnie jak zmienne kontrolne podczas debugowania programu.

Poniższe przykładowe zapytanie w zadaniu usługi Azure Stream Analytics ma jedno wejście strumienia, dwa dane wejściowe odwołania i dane wyjściowe do usługi Azure Table Storage. Zapytanie łączy dane z centrum zdarzeń i dwa referencyjne obiekty blob, aby uzyskać informacje o nazwie i kategorii:

Przykładowe zapytanie SELECT INTO usługi Stream Analytics

Zwróć uwagę, że zadanie jest uruchomione, ale żadne zdarzenia nie są generowane w danych wyjściowych. Na kafelku Monitorowanie pokazanym tutaj widać, że dane wejściowe generują dane, ale nie wiesz, który krok sprzężenia spowodował usunięcie wszystkich zdarzeń.

Kafelek Monitorowanie usługi Stream Analytics

W takiej sytuacji można dodać kilka dodatkowych instrukcji SELECT INTO, aby "rejestrować" pośrednie wyniki JOIN i dane odczytane z danych wejściowych.

W tym przykładzie dodaliśmy dwa nowe "tymczasowe dane wyjściowe". Mogą to być dowolne zlewy, które ci się podobają. W tym miejscu użyjemy usługi Azure Storage jako przykładu:

Dodawanie dodatkowych instrukcji SELECT INTO do zapytania usługi Stream Analytics

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

Ponowne napisanie zapytania SELECT INTO Stream Analytics

Teraz uruchom zadanie ponownie i pozwól mu uruchomić przez kilka minut. Następnie wykonaj zapytanie o temp1 i temp2 za pomocą programu Visual Studio Cloud Explorer, aby utworzyć następujące tabele:

tabela temp1ZAPYTANIE SELECT INTO temp1 table Stream Analytics

tabela temp2SELECT INTO temp2 table Stream Analytics query (ZAPYTANIE SELECT INTO temp2 table Stream Analytics)

Jak widać, zarówno temp1, jak i temp2 mają dane, a kolumna name jest wypełniana poprawnie w temp2. Jednak ponieważ nadal nie ma danych wyjściowych, coś jest nie tak:

SELECT INTO output1 table with no data Stream Analytics query (SELECT INTO output1 table with no data Stream Analytics query( SELECT INTO output1 table with no data Stream Analytics query

Próbkowanie danych może być niemal pewne, że problem dotyczy drugiej funkcji JOIN. Możesz pobrać dane referencyjne z obiektu blob i przyjrzeć się:

ZAPYTANIE SELECT INTO ref table Stream Analytics

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

Możesz naprawić format danych, przekazać go do odwołania do obiektu blob i spróbować ponownie:

ZAPYTANIE SELECT INTO temp table Stream Analytics

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

SELECT INTO final table Stream Analytics query (WYBIERANIE DO końcowej tabeli w zapytaniu usługi Stream Analytics)

Uzyskaj pomoc

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

Następne kroki