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

Wprowadzenie

W tym rozwiązaniu dowiesz się, jak za pomocą usługi Azure Stream Analytics uzyskiwać szczegółowe informacje w czasie rzeczywistym na podstawie 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, która jest hostowana na platformie Microsoft Azure, usługa Azure Stream Analytics zapewnia wbudowaną odporność, małe opóźnienia i skalowalność, aby zapewnić pracę 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.
  • Wyrażanie 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 bez obaw.
  • Skorzystaj ze ś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 powszechnym 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łatę za uczestnictwo. W zautomatyzowanych kabinach czujnik na każdym stoisku skanuje kartę RFID, która jest przymocowana do przedniej szyby pojazdu podczas przekazywania punktu płatnego. Można łatwo wizualizować przejazd pojazdów przez te stacje płatne jako strumień zdarzeń, na którym można wykonywać interesujące operacje.

Zdjęcie samochodów przy płatnych kabinach

Dane przychodzące

To rozwiązanie działa z dwoma strumieniami danych. Czujniki zainstalowane w wejściu i wyjściu stacji płatnych produkują pierwszy strumień. Drugi strumień to statyczny zestaw danych wyszukiwania 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 uwzględnionej 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
Identyfikator opłaty płatnej Identyfikator stoiska płatnego, który jednoznacznie identyfikuje stoisko płatne
EntryTime Data i godzina wejścia pojazdu do punktu płatnego w utc
LicensePlate Numer rejestracyjny pojazdu
Stan Stan w Stany Zjednoczone
Marka Producent samochodów
Model Numer modelu samochodu
Typ pojazdu 1 dla pojazdów pasażerskich lub 2 dla pojazdów komercyjnych
Typ wagi Waga pojazdu w tonach; 0 dla pojazdów pasażerskich
Płatnych 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 uwzględnionej w przykładowej aplikacji.

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

Oto krótki opis kolumn:

Kolumna Opis
Identyfikator opłaty płatnej Identyfikator stoiska płatnego, który jednoznacznie identyfikuje stoisko płatne
Exittime Data i godzina wyjścia pojazdu z punktu płatnego w utc
LicensePlate Numer rejestracyjny pojazdu

Dane rejestracyjne 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 poprosić o bezpłatną wersję próbną.

Pamiętaj, aby wykonać kroki opisane w sekcji "Czyszczenie konta platformy Azure" na końcu tego artykułu, aby zapewnić najlepsze wykorzystanie środków 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 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 Azure Portal, jeśli zostanie wyświetlony monit.

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

  4. Określ nową grupę zasobów z unikatową nazwą, 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 uzyskać częstotliwość wysyłania danych do centrum zdarzeń.

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

  8. Wybierz pozycję Przypnij do pulpitu nawigacyjnego , aby później łatwo zlokalizować 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
    • Dwa Web Apps

Badanie przykładowego zadania TollApp

  1. Począwszy od grupy zasobów w poprzedniej sekcji, wybierz zadanie przesyłania strumieniowego usługi Stream Analytics rozpoczynające się 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 sparafizować intencję zapytania, załóżmy, że musisz policzyć liczbę pojazdów, które wchodzą w kabinę opłat. Ponieważ kabina opłat autostrady ma ciągły strumień pojazdów wchodzących, są to zdarzenia wejściowe są analogiczne do strumienia, który nigdy się nie zatrzymuje. Aby oszacować strumień, należy zdefiniować "okres czasu", który ma być mierzony. Uściślimy pytanie dalej, aby "Ile pojazdów wchodzi do kabiny płatnej co trzy minuty?" Jest to często nazywane liczbą wirowania.

    Jak widać, usługa Azure Stream Analytics używa języka zapytań takiego jak SQL i dodaje kilka rozszerzeń w celu określenia aspektów związanych z czasem zapytania. Aby uzyskać więcej informacji, przeczytaj o konstrukcjach zarządzania czasem i oknach 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 TollApp

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

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

  2. W okienku Uruchom zadanie wybierz pozycję Teraz.

  3. Po kilku chwilach po uruchomieniu zadania na stronie Przegląd zadania przesyłania strumieniowego wyświetl wykres Monitorowanie . Wykres powinien pokazywać 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 wzorcem nazwy tollapp<random-cosmos>.

  3. Wybierz nagłówek Data Explorer, aby otworzyć stronę Data Explorer.

  4. Rozwiń listę tollAppDatabase>tollAppCollection>Documents.

  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 poszczególne tollidelementy , windowend timei z count of cars tego okna.

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

Raport całkowity czas dla każdego samochodu

Średni czas wymagany do przejścia samochodu przez opłatę pomaga ocenić wydajność procesu i doświadczenia klienta.

Aby znaleźć łączny czas, dołącz strumień EntryTime ze strumieniem ExitTime. Sprzężenia dwóch strumieni wejściowych w równych pasujących kolumnach TollId i LicensePlate. Operator JOIN wymaga określenia przedziału czasowego opisującego akceptowalną różnicę czasu między przyłączonymi zdarzeniami. Użyj funkcji DATEDIFF , aby określić, że zdarzenia nie powinny przekraczać 15 minut od siebie. Zastosuj również funkcję DATEDIFF do wyjścia i 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ź wartość Tak , aby zapisać zmiany.

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

  7. W okienku Uruchom zadanie wybierz pozycję Teraz.

Przejrzyj łączny czas 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śloną tablicą licencyjną, entrytime wartością i exit timei polem obliczeniowym durationinminutes DATEDIFF pokazującym czas trwania stoiska opłat w ciągu dwóch minut:

{
    "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 się 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ę wygasań 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 zajmującej się opłatami, może przejść przez kabinę poboru opłat 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 dane wyjściowe:

    {
        "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 jest skalowany w poziomie. PartitionId to specjalna kolumna, którą system dodaje do identyfikatora partycji danych wejściowych (centrum zdarzeń).

Aby skalować zapytanie w poziomie do partycji, zmodyfikuj składnię zapytania do następującego kodu:

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 nagłówku CONFIGURE 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, którą 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 zapewnia 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. Konfiguracja po raz pierwszy jest wymagana do korzystania z konta magazynu w tym samym regionie (nazwa opłaty, takie jak reszta tego dokumentu).

Monitorowanie zadań usługi Azure Stream Analytics

Możesz również uzyskać dostęp do dzienników aktywności w obszarze Ustawienia pulpitu nawigacyjnego zadania.

Czyszczenie zasobów TollApp

  1. Zatrzymaj zadanie usługi Stream Analytics w 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 toll data, rozwiązanie wyjaśniło typowe typy problemów, które pojawiają się w przestrzeni danych w ruchu i jak można je rozwiązać za pomocą 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 statycznymi danymi referencyjnymi 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 sekcji Przykłady zapytań dla typowych wzorców użycia usługi Stream Analytics.