Udostępnij za pośrednictwem


Tworzenie rozwiązania IoT przy użyciu usługi Stream Analytics

Wprowadzenie

W tym rozwiązaniu dowiesz się, jak używać usługi Azure Stream Analytics do uzyskiwania szczegółowych informacji w czasie rzeczywistym z danych. Deweloperzy mogą łatwo łączyć strumienie danych, takie jak strumienie kliknięć, dzienniki i zdarzenia generowane przez urządzenie, z rekordami historycznymi lub danymi referencyjnymi w celu uzyskania szczegółowych informacji biznesowych. Jako w pełni zarządzana usługa obliczeniowa strumienia w czasie rzeczywistym hostowana na platformie Microsoft Azure, usługa Azure Stream Analytics zapewnia wbudowaną odporność, małe opóźnienia i skalowalność w celu zapewnienia pracy w ciągu kilku minut.

Po ukończeniu tego rozwiązania możesz wykonać następujące czynności:

  • Zapoznaj się z portalem usługi Azure Stream Analytics.
  • Konfigurowanie i wdrażanie zadania przesyłania strumieniowego.
  • Artykułowanie rzeczywistych problemów i rozwiązywanie ich przy użyciu języka zapytań usługi Stream Analytics.
  • Twórz rozwiązania do przesyłania strumieniowego dla klientów przy użyciu usługi Stream Analytics z ufnością.
  • Użyj środowiska monitorowania i rejestrowania, aby rozwiązać problemy.

Wymagania wstępne

Do ukończenia tego rozwiązania potrzebne są następujące wymagania wstępne:

Wprowadzenie do scenariusza: "Hello, Toll!"

Stacja opłat jest częstym zjawiskiem. Spotykasz je na wielu drogach ekspresowych, mostach i tunelach na całym świecie. Każda stacja opłat ma wiele płatnych kabin. W kabinach ręcznych zatrzymasz się, aby zapłacić opłaty za uczestnictwo. W zautomatyzowanych kabinach czujnik na każdej kabinie skanuje kartę RFID, która jest przymocowana do przedniej szyby pojazdu podczas mijania kabiny płatnej. Łatwe jest wizualizowanie przejścia pojazdów przez te stacje opłat jako strumienia zdarzeń, w którym można wykonywać interesujące operacje.

Obraz samochodów w kabinach płatnych

Dane przychodzące

To rozwiązanie działa z dwoma strumieniami danych. Czujniki zainstalowane w wejściu i wyjściu ze stacji płatnych produkują pierwszy strumień. Drugi strumień to statyczny zestaw danych odnośników zawierający dane rejestracji pojazdów.

Strumień danych wejściowych

Strumień danych wejściowych zawiera informacje o samochodach podczas wprowadzania opłat. Zdarzenia danych zakończenia są przesyłane strumieniowo na żywo do centrum zdarzeń z aplikacji internetowej zawartej w przykładowej aplikacji.

| TollID | EntryTime | LicensePlate | State | Make | Model | VehicleType | VehicleWeight | Toll | Tag |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 |2014-09-10 12:01:00.000 |JNB 7001 |NY |Honda |CRV |1 |0 |7 | |
| 1 |2014-09-10 12:02:00.000 |YXZ 1001 |NY |Toyota |Camry |1 |0 |4 |123456789 |
| 3 |2014-09-10 12:02:00.000 |ABC 1004 |CT |Ford |Taurus |1 |0 |5 |456789123 |
| 2 |2014-09-10 12:03:00.000 |XYZ 1003 |CT |Toyota |Corolla |1 |0 |4 | |
| 1 |2014-09-10 12:03:00.000 |BNJ 1007 |NY |Honda |CRV |1 |0 |5 |789123456 |
| 2 |2014-09-10 12:05:00.000 |CDE 1007 |NJ |Toyota |4x4 |1 |0 |6 |321987654 |

Oto krótki opis kolumn:

Kolumna opis
TollID Identyfikator stoiska płatnego, który jednoznacznie identyfikuje stoisko płatne
EntryTime Data i godzina wejścia pojazdu do kabiny płatnej w utc
LicensePlate Numer rejestracyjny pojazdu
Stan Stan w Stany Zjednoczone
Tworzenie Producent samochodów
Model Numer modelu samochodu
VehicleType 1 dla pojazdów pasażerskich lub 2 dla pojazdów komercyjnych
Typ wagi Waga pojazdu w tonach; 0 dla pojazdów pasażerskich
Opłata Wartość opłaty płatnej w USD
Tag E-Tag na samochodach, które automatyzują płatności; puste miejsce, w którym płatność została wykonana ręcznie

Zamykanie strumienia danych

Strumień danych wyjścia zawiera informacje o samochodach opuszczających stację opłat. Zdarzenia danych zakończenia są przesyłane strumieniowo na żywo do centrum zdarzeń z aplikacji internetowej zawartej w przykładowej aplikacji.

TollId ExitTime LicensePlate
1 2014-09-10T12:03:00.000000Z JNB 7001
1 2014-09-10T12:03:00.000000Z YXZ 1001
3 2014-09-10T12:04:00.000000Z ABC 1004
2 2014-09-10T12:07:00.000000Z XYZ 1003
1 2014-09-10T12:08:00.000000Z BNJ 1007
2 2014-09-10T12:07:00.000000Z CDE 1007

Oto krótki opis kolumn:

Kolumna opis
TollID Identyfikator stoiska płatnego, który jednoznacznie identyfikuje stoisko płatne
ExitTime Data i godzina wyjścia pojazdu ze stoiska płatnego w utc
LicensePlate Numer rejestracyjny pojazdu

Dane rejestracji pojazdów komercyjnych

Rozwiązanie używa statycznej migawki bazy danych rejestracji pojazdów komercyjnych. Te dane są zapisywane jako plik JSON w usłudze Azure Blob Storage uwzględnione w przykładzie.

LicensePlate Identyfikator rejestracji Wygasłe
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
RIV 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

Oto krótki opis kolumn:

Kolumna opis
LicensePlate Numer rejestracyjny pojazdu
Identyfikator rejestracji Identyfikator rejestracji pojazdu
Wygasłe Stan rejestracji pojazdu: 0, jeśli rejestracja pojazdu jest aktywna, 1, jeśli rejestracja wygasła

Konfigurowanie środowiska dla usługi Azure Stream Analytics

Aby ukończyć to rozwiązanie, potrzebujesz subskrypcji platformy Microsoft Azure. Jeśli nie masz konta platformy Azure, możesz zażądać bezpłatnej wersji próbnej.

Pamiętaj, aby wykonać kroki opisane w sekcji "Czyszczenie konta platformy Azure" na końcu tego artykułu, aby jak najlepiej wykorzystać środki na korzystanie z platformy Azure.

Wdrażanie przykładu

Istnieje kilka zasobów, które można łatwo wdrożyć w grupie zasobów wraz z kilkoma kliknięciami. Definicja rozwiązania jest hostowana w repozytorium GitHub pod adresem https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

Wdrażanie szablonu TollApp w witrynie Azure Portal

  1. Aby wdrożyć środowisko TollApp na platformie Azure, użyj tego linku, aby wdrożyć szablon platformy Azure TollApp.

  2. Zaloguj się do witryny Azure Portal, jeśli zostanie wyświetlony monit.

  3. Wybierz subskrypcję, w której są naliczane różne zasoby.

  4. Określ nową grupę zasobów o unikatowej nazwie, na przykład MyTollBooth.

  5. Wybierz lokalizację platformy Azure.

  6. Określ interwał jako liczbę sekund. Ta wartość jest używana w przykładowej aplikacji internetowej, aby dowiedzieć się, jak często wysyłać dane do centrum zdarzeń.

  7. Sprawdź , czy zgadzasz się na warunki i postanowienia.

  8. Wybierz pozycję Przypnij do pulpitu nawigacyjnego , aby później łatwo znaleźć zasoby.

  9. Wybierz pozycję Kup , aby wdrożyć przykładowy szablon.

  10. Po kilku chwilach zostanie wyświetlone powiadomienie informujące o pomyślnym wdrożeniu.

Przeglądanie zasobów usługi Azure Stream Analytics TollApp

  1. Zaloguj się w witrynie Azure Portal.

  2. Znajdź grupę zasobów o nazwie w poprzedniej sekcji.

  3. Sprawdź, czy w grupie zasobów są wymienione następujące zasoby:

    • Jedno konto usługi Azure Cosmos DB
    • Jedno zadanie usługi Azure Stream Analytics
    • Jedno konto usługi Azure Storage
    • Jedno centrum zdarzeń platformy Azure
    • Dwie aplikacje internetowe

Badanie przykładowego zadania TollApp

  1. Począwszy od grupy zasobów w poprzedniej sekcji, wybierz zadanie przesyłania strumieniowego usługi Stream Analytics, zaczynając od nazwy tollapp (nazwa zawiera losowe znaki unikatowości).

  2. Na stronie Przegląd zadania zwróć uwagę na pole Zapytanie, aby wyświetlić składnię zapytania.

    SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*) AS Count
    INTO CosmosDB
    FROM EntryStream TIMESTAMP BY EntryTime
    GROUP BY TUMBLINGWINDOW(minute, 3), TollId
    

    Aby sparafrazować intencję zapytania, załóżmy, że musisz policzyć liczbę pojazdów, które wchodzą do kabiny płatnej. Ponieważ autostradowy płatny kabina ma ciągły strumień pojazdów wjeżdżających, są to zdarzenia wejściowe są analogiczne do strumienia, który nigdy się nie zatrzymuje. Aby określić ilościowo strumień, należy zdefiniować "okres czasu", który ma być mierzony. Uściślijmy pytanie dalej, aby "Ile pojazdów wchodzi do kabiny płatnej co trzy minuty?" Jest to często określane jako liczba wirowania.

    Jak widać, usługa Azure Stream Analytics używa języka zapytań, takiego jak SQL, i dodaje kilka rozszerzeń, aby określić aspekty związane z czasem zapytania. Aby uzyskać więcej informacji, zapoznaj się z tematem Time Management and Windowing constructs used in the query (Zarządzanie czasem i tworzenie okien używanych w zapytaniu).

  3. Zapoznaj się z danymi wejściowymi przykładowego zadania TollApp. Tylko dane wejściowe EntryStream są używane w bieżącym zapytaniu.

    • Wejście EntryStream to połączenie centrum zdarzeń, które kolejkuje dane reprezentujące za każdym razem, gdy samochód wchodzi na autostradę. Aplikacja internetowa, która jest częścią przykładu, tworzy zdarzenia i dane są umieszczone w kolejce w tym centrum zdarzeń. Należy pamiętać, że te dane wejściowe są odpytywane w klauzuli FROM zapytania przesyłania strumieniowego.
    • Dane wejściowe ExitStream to połączenie centrum zdarzeń, które kolejkuje dane reprezentujące za każdym razem, gdy samochód wychodzi z autostrady. Te dane wejściowe przesyłania strumieniowego są używane w późniejszych odmianach składni zapytania.
    • Dane wejściowe rejestracji to połączenie usługi Azure Blob Storage wskazujące statyczny plik registration.json używany do wyszukiwania zgodnie z potrzebami. Te dane wejściowe referencyjne są używane w późniejszych odmianach składni zapytania.
  4. Zapoznaj się z danymi wyjściowymi przykładowego zadania TollApp.

    • Dane wyjściowe usługi Azure Cosmos DB to kontener bazy danych usługi Azure Cosmos DB, który odbiera zdarzenia ujścia danych wyjściowych. Należy pamiętać, że te dane wyjściowe są używane w klauzuli INTO zapytania przesyłania strumieniowego.

Uruchamianie zadania przesyłania strumieniowego usługi TollApp

Wykonaj następujące kroki, aby uruchomić zadanie przesyłania strumieniowego:

  1. Na stronie Przegląd zadania wybierz pozycję Uruchom.

  2. W okienku Uruchamianie zadania wybierz pozycję Teraz.

  3. Po kilku chwilach po uruchomieniu zadania na stronie Przegląd zadania przesyłania strumieniowego wyświetl wykres Monitorowanie . Wykres powinien zawierać kilka tysięcy zdarzeń wejściowych i dziesiątki zdarzeń wyjściowych.

Przeglądanie danych wyjściowych usługi Azure Cosmos DB

  1. Znajdź grupę zasobów zawierającą zasoby TollApp.

  2. Wybierz konto usługi Azure Cosmos DB z nazwą tollapp <random-cosmos>.

  3. Wybierz nagłówek Eksplorator danych, aby otworzyć stronę Eksplorator danych.

  4. Rozwiń pozycję tollAppDatabase tollAppCollection Documents (Dokumenty tollAppDatabase>>).

  5. Na liście identyfikatorów jest wyświetlanych kilka dokumentów po udostępnieniu danych wyjściowych.

  6. Wybierz każdy identyfikator, aby przejrzeć dokument JSON. Zwróć uwagę na count of cars poszczególne elementy tollid, windowend timei z tego okna.

  7. Po kolejnych trzech minutach dostępny jest inny zestaw czterech dokumentów, jeden dokument na tollid.

Zgłaszanie łącznego czasu dla każdego samochodu

Średni czas wymagany przez samochód do przejścia przez opłaty pomaga ocenić wydajność procesu i doświadczenia klienta.

Aby znaleźć całkowity czas, dołącz strumień EntryTime ze strumieniem ExitTime. Dołącz dwa strumienie wejściowe w równych pasujących kolumnach TollId i LicensePlate. Operator JOIN wymaga określenia zakresu czasowego, który opisuje akceptowalną różnicę czasu między połączonymi zdarzeniami. Użyj funkcji DATEDIFF, aby określić, że zdarzenia nie powinny przekraczać 15 minut od siebie. Zastosuj również funkcję DATEDIFF , aby wyjść i czas wejścia, aby obliczyć rzeczywisty czas spędzony przez samochód na stacji opłat. Zwróć uwagę na różnicę użycia funkcji DATEDIFF , gdy jest używana w instrukcji SELECT , a nie warunku JOIN .

SELECT EntryStream.TollId, EntryStream.EntryTime, ExitStream.ExitTime, EntryStream.LicensePlate, DATEDIFF (minute, EntryStream.EntryTime, ExitStream.ExitTime) AS DurationInMinutes
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN ExitStream TIMESTAMP BY ExitTime
ON (EntryStream.TollId= ExitStream.TollId AND EntryStream.LicensePlate = ExitStream.LicensePlate)
AND DATEDIFF (minute, EntryStream, ExitStream ) BETWEEN 0 AND 15

Aby zaktualizować składnię zapytania zadania przesyłania strumieniowego TollApp:

  1. Na stronie Przegląd zadania wybierz pozycję Zatrzymaj.

  2. Poczekaj chwilę na powiadomienie, że zadanie zostało zatrzymane.

  3. W nagłówku TOPOLOGIA ZADANIA wybierz pozycję <> Zapytanie

  4. Wklej dostosowane zapytanie SQL przesyłane strumieniowo.

  5. Wybierz pozycję Zapisz , aby zapisać zapytanie. Potwierdź opcję Tak , aby zapisać zmiany.

  6. Na stronie Przegląd zadania wybierz pozycję Uruchom.

  7. W okienku Uruchamianie zadania wybierz pozycję Teraz.

Przeglądanie łącznego czasu w danych wyjściowych

Powtórz kroki opisane w poprzedniej sekcji, aby przejrzeć dane wyjściowe usługi Azure Cosmos DB z zadania przesyłania strumieniowego. Przejrzyj najnowsze dokumenty JSON.

Na przykład w tym dokumencie przedstawiono przykładowy samochód z określonym tablicą rejestracyjną, entrytime wartościami i exit timei polem durationinminutes obliczeniowym DATEDIFF pokazującym czas trwania stoiska płatnego jako dwie minuty:

{
    "tollid": 4,
    "entrytime": "2018-04-05T06:51:39.0491173Z",
    "exittime": "2018-04-05T06:53:09.0491173Z",
    "licenseplate": "JVR 9425",
    "durationinminutes": 2,
    "id": "ff52eb25-d580-7566-2879-1f52bba6601e",
    "_rid": "+8E4AI1DZgBjAAAAAAAAAA==",
    "_self": "dbs/+8E4AA==/colls/+8E4AI1DZgA=/docs/+8E4AI1DZgBjAAAAAAAAAA==/",
    "_etag": "\"ad02f6b8-0000-0000-0000-5ac5c8330000\"",
    "_attachments": "attachments/",
    "_ts": 1522911283
}

Zgłaszanie pojazdów z wygasłą rejestracją

Usługa Azure Stream Analytics może używać statycznych migawek danych referencyjnych do łączenia ze strumieniami danych czasowych. Aby zademonstrować tę możliwość, użyj następującego przykładowego pytania. Dane wejściowe rejestracji to statyczny plik json obiektu blob, który zawiera listę wygasania tagów licencji. Łącząc się na tablicy rejestracyjnej, dane referencyjne są porównywane z każdym pojazdem przechodzącym przez oba opłaty.

Jeśli pojazd komercyjny jest zarejestrowany w firmie płatnej, może przejść przez stoisko płatne bez zatrzymania do kontroli. Użyj tabeli odnośników rejestracji, aby zidentyfikować wszystkie pojazdy komercyjne, które wygasły rejestracje.

SELECT EntryStream.EntryTime, EntryStream.LicensePlate, EntryStream.TollId, Registration.RegistrationId
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN Registration
ON EntryStream.LicensePlate = Registration.LicensePlate
WHERE Registration.Expired = '1'
  1. Powtórz kroki opisane w poprzedniej sekcji, aby zaktualizować składnię zapytania zadania przesyłania strumieniowego TollApp.

  2. Powtórz kroki opisane w poprzedniej sekcji, aby przejrzeć dane wyjściowe usługi Azure Cosmos DB z zadania przesyłania strumieniowego.

Przykładowe wyjście:

    {
        "entrytime": "2018-04-05T08:01:28.0252168Z",
        "licenseplate": "GMT 3221",
        "tollid": 1,
        "registrationid": "763220582",
        "id": "47db0535-9716-4eb2-db58-de7886966cbf",
        "_rid": "y+F8AJ9QWACSAQAAAAAAAA==",
        "_self": "dbs/y+F8AA==/colls/y+F8AJ9QWAA=/docs/y+F8AJ9QWACSAQAAAAAAAA==/",
        "_etag": "\"88007d8d-0000-0000-0000-5ac5d7e20000\"",
        "_attachments": "attachments/",
        "_ts": 1522915298
    }

Skalowanie zadania w poziomie

Usługa Azure Stream Analytics jest przeznaczona do elastycznego skalowania, dzięki czemu może obsługiwać duże ilości danych. Zapytanie usługi Azure Stream Analytics może użyć klauzuli PARTITION BY , aby poinformować system, że ten krok skaluje się w poziomie. PartitionId to specjalna kolumna dodana przez system w celu dopasowania identyfikatora partycji danych wejściowych (centrum zdarzeń).

Aby skalować zapytanie w poziomie do partycji, zmodyfikuj składnię zapytania na następujący kod:

SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*)AS Count
INTO CosmosDB
FROM EntryStream
TIMESTAMP BY EntryTime
PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId

Aby skalować zadanie przesyłania strumieniowego w górę do większej liczby jednostek przesyłania strumieniowego:

  1. Zatrzymaj bieżące zadanie.

  2. Zaktualizuj składnię zapytania na <> stronie Zapytanie i zapisz zmiany.

  3. W obszarze nagłówka CONFIGURE (KONFIGUROWANIE) w zadaniu przesyłania strumieniowego wybierz pozycję Skaluj.

  4. Przesuń suwak Jednostki przesyłania strumieniowego z zakresu od 1 do 6. Jednostki przesyłania strumieniowego definiują ilość mocy obliczeniowej, jaką może odbierać zadanie. Wybierz pozycję Zapisz.

  5. Uruchom zadanie przesyłania strumieniowego, aby zademonstrować dodatkową skalę. Usługa Azure Stream Analytics dystrybuuje pracę między więcej zasobów obliczeniowych i osiąga lepszą przepływność, partycjonując pracę między zasobami przy użyciu kolumny wyznaczonej w klauzuli PARTITION BY.

Monitorowanie zadania

Obszar MONITOR zawiera statystyki dotyczące uruchomionego zadania. Do korzystania z konta magazynu w tym samym regionie jest wymagana konfiguracja po raz pierwszy (nazwa opłaty takie jak pozostała część tego dokumentu).

Monitorowanie zadań usługi Azure Stream Analytics

Dostęp do dzienników aktywności można również uzyskać w obszarze Ustawienia pulpitu nawigacyjnego zadania.

Czyszczenie zasobów TollApp

  1. Zatrzymaj zadanie usługi Stream Analytics w witrynie Azure Portal.

  2. Znajdź grupę zasobów zawierającą osiem zasobów związanych z szablonem TollApp.

  3. Wybierz pozycję Usuń grupę zasobów. Wpisz nazwę grupy zasobów, aby potwierdzić usunięcie.

Podsumowanie

To rozwiązanie wprowadziło Cię do usługi Azure Stream Analytics. Pokazano w nim, jak skonfigurować dane wejściowe i wyjściowe dla zadania usługi Stream Analytics. Korzystając ze scenariusza danych płatnych, rozwiązanie wyjaśniło typowe typy problemów występujących w przestrzeni danych w ruchu i sposób ich rozwiązywania przy użyciu prostych zapytań przypominających sql w usłudze Azure Stream Analytics. W rozwiązaniu opisano konstrukcje rozszerzenia SQL do pracy z danymi czasowymi. Pokazano w nim, jak połączyć strumienie danych, jak wzbogacić strumień danych przy użyciu statycznych danych referencyjnych oraz jak skalować zapytanie w poziomie w celu uzyskania wyższej przepływności.

Chociaż to rozwiązanie zapewnia dobre wprowadzenie, nie jest kompletne w żaden sposób. Więcej wzorców zapytań można znaleźć przy użyciu języka SAQL w artykule Przykłady zapytań dla typowych wzorców użycia usługi Stream Analytics.