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.
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
Aby wdrożyć środowisko TollApp na platformie Azure, użyj tego linku, aby wdrożyć szablon platformy Azure TollApp.
Zaloguj się do Azure Portal, jeśli zostanie wyświetlony monit.
Wybierz subskrypcję, w której są rozliczane różne zasoby.
Określ nową grupę zasobów z unikatową nazwą, na przykład
MyTollBooth
.Wybierz lokalizację platformy Azure.
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ń.
Sprawdź , czy zgadzasz się na warunki i postanowienia.
Wybierz pozycję Przypnij do pulpitu nawigacyjnego , aby później łatwo zlokalizować zasoby.
Wybierz pozycję Kup , aby wdrożyć przykładowy szablon.
Po kilku chwilach zostanie wyświetlone powiadomienie informujące o pomyślnym wdrożeniu.
Przeglądanie zasobów usługi Azure Stream Analytics TollApp
Zaloguj się w witrynie Azure Portal.
Znajdź grupę zasobów o nazwie w poprzedniej sekcji.
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
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).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.
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.
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:
Na stronie Przegląd zadania wybierz pozycję Uruchom.
W okienku Uruchom zadanie wybierz pozycję Teraz.
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
Znajdź grupę zasobów zawierającą zasoby TollApp.
Wybierz konto usługi Azure Cosmos DB z wzorcem nazwy tollapp<random-cosmos>.
Wybierz nagłówek Data Explorer, aby otworzyć stronę Data Explorer.
Rozwiń listę tollAppDatabase>tollAppCollection>Documents.
Na liście identyfikatorów jest wyświetlanych kilka dokumentów po udostępnieniu danych wyjściowych.
Wybierz każdy identyfikator, aby przejrzeć dokument JSON. Zwróć uwagę na poszczególne
tollid
elementy ,windowend time
i zcount of cars
tego okna.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:
Na stronie Przegląd zadania wybierz pozycję Zatrzymaj.
Poczekaj chwilę na powiadomienie, że zadanie zostało zatrzymane.
W nagłówku TOPOLOGIA ZADANIA wybierz pozycję <> Zapytanie
Wklej dostosowane zapytanie SQL przesyłane strumieniowo.
Wybierz pozycję Zapisz , aby zapisać zapytanie. Potwierdź wartość Tak , aby zapisać zmiany.
Na stronie Przegląd zadania wybierz pozycję Uruchom.
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 time
i 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'
Powtórz kroki opisane w poprzedniej sekcji, aby zaktualizować składnię zapytania zadania przesyłania strumieniowego TollApp.
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:
Zatrzymaj bieżące zadanie.
Zaktualizuj składnię zapytania na <> stronie Zapytanie i zapisz zmiany.
W nagłówku CONFIGURE w zadaniu przesyłania strumieniowego wybierz pozycję Skaluj.
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.
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).
Możesz również uzyskać dostęp do dzienników aktywności w obszarze Ustawienia pulpitu nawigacyjnego zadania.
Czyszczenie zasobów TollApp
Zatrzymaj zadanie usługi Stream Analytics w Azure Portal.
Znajdź grupę zasobów zawierającą osiem zasobów związanych z szablonem TollApp.
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.