Vytvoření řešení IoT pomocí Stream Analytics

Úvod

V tomto řešení se naučíte používat Azure Stream Analytics k získání přehledů z dat v reálném čase. Vývojáři můžou snadno kombinovat datové proudy, jako jsou streamy kliknutí, protokoly a události generované zařízením, s historickými záznamy nebo referenčními daty, aby získali obchodní přehledy. Jako plně spravovaná výpočetní služba datových proudů v reálném čase hostovaná v Microsoft Azure poskytuje Azure Stream Analytics integrovanou odolnost, nízkou latenci a škálovatelnost, která vám umožní zprovoznění během několika minut.

Po dokončení tohoto řešení můžete:

  • Seznamte se s portálem Azure Stream Analytics.
  • Nakonfigurujte a nasaďte úlohu streamování.
  • Zformulujte reálné problémy a vyřešte je pomocí dotazovacího jazyka Stream Analytics.
  • Vyvíjejte streamovací řešení pro vaše zákazníky s využitím Stream Analytics s jistotou.
  • Při řešení potíží využijte prostředí pro monitorování a protokolování.

Požadavky

K dokončení tohoto řešení potřebujete následující požadavky:

Úvod do scénáře: "Hello, Toll!"

Placená stanice je běžným jevem. Setkáte se s nimi na mnoha dálnicích, mostech a tunelech po celém světě. Každá placená stanice má několik placených bran. U manuálních stánků se zastavíte, abyste zaplatili placené obsluhě. V automatizovaných kabinách senzor v horní části každého stánku naskenuje kartu RFID, která je připevněna na čelním skle vašeho vozidla, když procházíte placenou kabinou. Průchod vozidel těmito placemi je snadné vizualizovat jako stream událostí, přes který lze provádět zajímavé operace.

Obrázek aut na mýtných branách

Příchozí data

Toto řešení funguje se dvěma datovými proudy. Senzory instalované ve vstupních a výstupních mýtných stanicích produkují první proud. Druhý stream je statická vyhledávací datová sada, která obsahuje data registrace vozidel.

Vstupní datový stream

Vstupní datový proud obsahuje informace o automobilech při vstupu na placené stanice. Události výstupních dat se živě streamují do centra událostí z webové aplikace, která je součástí ukázkové aplikace.

| 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 |

Tady je stručný popis sloupců:

Sloupec Popis
TollID ID placené brány, které jednoznačně identifikuje placenou kabinu
EntryTime Datum a čas vjetí vozidla na placenou v UTC
Licenčníplata Číslo registrační značky vozidla
Stav Stav v USA
Značka Výrobce automobilu
Modelování Číslo modelu automobilu
Typ vozidla Buď 1 pro osobní vozidla, nebo 2 pro užitková vozidla
Typ váhy Hmotnost vozidla v tunách; 0 pro osobní vozidla
Mýtné Hodnota placené linky v USD
Značka E-Tag na automobilu, který automatizuje platby; prázdné místo, kde se platba provedla ručně

Ukončení datového streamu

Výstupní datový proud obsahuje informace o autech opouštějích placenou stanici. Události výstupních dat se živě streamují do centra událostí z webové aplikace, která je součástí ukázkové aplikace.

TollId Čas ukončení Licenčníplata
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

Tady je stručný popis sloupců:

Sloupec Popis
TollID ID placené brány, které jednoznačně identifikuje placenou kabinu
Čas ukončení Datum a čas vyjetí vozidla z placeny v UTC
Licenčníplata Číslo registrační značky vozidla

Registrační údaje o nákladních vozidlech

Řešení používá statický snímek databáze registrace obchodních vozidel. Tato data se uloží jako soubor JSON do úložiště objektů blob v Azure, které je součástí ukázky.

Licenčníplata ID registrace Platnost vypršela
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
RIV 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

Tady je stručný popis sloupců:

Sloupec Popis
Licenčníplata Číslo registrační značky vozidla
ID registrace ID registrace vozidla
Platnost vypršela Stav registrace vozidla: 0, pokud je registrace vozidla aktivní, 1, pokud registrace vypršela

Nastavení prostředí pro Azure Stream Analytics

K dokončení tohoto řešení potřebujete předplatné Microsoft Azure. Pokud nemáte účet Azure, můžete požádat o bezplatnou zkušební verzi.

Nezapomeňte postupovat podle kroků v části Vyčištění účtu Azure na konci tohoto článku, abyste mohli kredit Azure co nejlépe využít.

Nasazení ukázky

Existuje několik prostředků, které je možné snadno nasadit do skupiny prostředků pomocí několika kliknutí. Definice řešení je hostovaná v úložišti GitHub na adrese https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

Nasazení šablony TollApp v Azure Portal

  1. Pokud chcete nasadit prostředí TollApp do Azure, použijte tento odkaz k nasazení šablony TollApp Azure.

  2. Pokud se zobrazí výzva, přihlaste se k Azure Portal.

  3. Zvolte předplatné, ve kterém se účtují různé prostředky.

  4. Zadejte novou skupinu prostředků s jedinečným názvem, například MyTollBooth.

  5. Vyberte umístění Azure.

  6. Zadejte Interval jako počet sekund. Tato hodnota se používá v ukázkové webové aplikaci k tomu, jak často se mají odesílat data do centra událostí.

  7. Zkontrolujte , že souhlasíte s podmínkami a ujednáními.

  8. Vyberte Připnout na řídicí panel , abyste později mohli prostředky snadno najít.

  9. Výběrem možnosti Koupit nasaďte ukázkovou šablonu.

  10. Po chvíli se zobrazí oznámení s potvrzením úspěšného nasazení.

Projděte si prostředky Služby Azure Stream Analytics TollApp.

  1. Přihlaste se k webu Azure Portal.

  2. Vyhledejte skupinu prostředků, kterou jste pojmenovali v předchozí části.

  3. Ověřte, že jsou ve skupině prostředků uvedené následující prostředky:

    • Jeden účet služby Azure Cosmos DB
    • Jedna úloha Azure Stream Analytics
    • Jeden účet úložiště Azure
    • Jedno centrum událostí Azure
    • Dvě Web Apps

Prozkoumání ukázkové úlohy TollApp

  1. Počínaje skupinou prostředků v předchozí části vyberte úlohu streamování Stream Analytics začínající názvem tollapp (název obsahuje náhodné znaky z důvodu jedinečnosti).

  2. Na stránce Přehled úlohy si všimněte pole Dotaz , kde se zobrazí syntaxe dotazu.

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

    Abychom mohli parafrázovat záměr dotazu, řekněme, že potřebujete spočítat počet vozidel, která vjedou do placené brány. Vzhledem k tomu, že dálniční place má nepřetržitý proud vozidel, které vjíždějí, jsou tyto vstupní události analogické proudu, který nikdy nezastaví. Pokud chcete datový proud kvantifikovat, musíte definovat "časové období", které se má měřit. Pojďme otázku dále zpřesnit na otázku "Kolik vozidel vstupuje do placené brány každé tři minuty?". Tento počet se běžně označuje jako počet přeskakování.

    Jak vidíte, Azure Stream Analytics používá dotazovací jazyk, jako je SQL, a přidává několik rozšíření, která určují aspekty dotazu související s časem. Další podrobnosti najdete v článku o konstruktorech správy času a vytváření oken použitých v dotazu.

  3. Prozkoumejte vstupy ukázkové úlohy TollApp. V aktuálním dotazu se používá pouze vstup EntryStream.

    • Vstup EntryStream je připojení k centru událostí, které do fronty zasadí data, která představují pokaždé, když auto na dálnici vstoupí na placenou linku. Události vytváří webová aplikace, která je součástí ukázky, a tato data jsou v tomto centru událostí zařazena do fronty. Všimněte si, že tento vstup se dotazuje v klauzuli FROM dotazu streamování.
    • Vstup ExitStream je připojení centra událostí, které do fronty zasadí data, která představují pokaždé, když auto opustí placenou linku na dálnici. Tento vstup streamování se používá v pozdějších variantách syntaxe dotazu.
    • Vstup registrace je připojení služby Azure Blob Storage odkazující na soubor static registration.json, který se podle potřeby používá k vyhledávání. Tento vstup referenčních dat se používá v pozdějších variantách syntaxe dotazu.
  4. Prohlédněte si výstupy ukázkové úlohy TollApp.

    • Výstupem služby Azure Cosmos DB je kontejner databáze Azure Cosmos DB, který přijímá události výstupní jímky. Všimněte si, že tento výstup se používá v klauzuli INTO dotazu streamování.

Spuštění úlohy streamování TollApp

Úlohu streamování spustíte takto:

  1. Na stránce Přehled úlohy vyberte Spustit.

  2. V podokně Spustit úlohu vyberte Nyní.

  3. Po chvíli, po spuštění úlohy, si na stránce Přehled úlohy streamování zobrazte graf Monitorování . Graf by měl zobrazit několik tisíc vstupních událostí a desítky výstupních událostí.

Kontrola výstupních dat služby Azure Cosmos DB

  1. Vyhledejte skupinu prostředků, která obsahuje prostředky TollApp.

  2. Vyberte účet služby Azure Cosmos DB se vzorem názvů tollapp<random-cosmos>.

  3. Výběrem nadpisu Data Explorer otevřete stránku Data Explorer.

  4. Rozbalte dokumenty tollAppDatabase>tollAppCollection>.

  5. Jakmile je výstup k dispozici, v seznamu ID se zobrazí několik dokumentů.

  6. Vyberte jednotlivá ID a zkontrolujte dokument JSON. Všimněte si každého tollid, windowend timea objektu count of cars z daného okna.

  7. Po dalších třech minutách je k dispozici další sada čtyř dokumentů, jeden dokument pro každou tollid.

Sestava celkového času pro každé auto

Průměrná doba potřebná k tomu, aby auto prošlo placeným úsekem, pomáhá vyhodnotit efektivitu procesu a zkušenosti zákazníků.

Pokud chcete zjistit celkový čas, připojte datový proud EntryTime ke streamu ExitTime. Spojí dva vstupní streamy na stejných sloupcích TollId a LicensePlate. Operátor JOIN vyžaduje, abyste zadali časovou rezervu, která popisuje přijatelný časový rozdíl mezi událostmi spojení. Pomocí funkce DATEDIFF určete, že události od sebe nesmí být více než 15 minut. Použijte také funkci DATEDIFF pro časy výstupu a vstupu, abyste mohli vypočítat skutečný čas, který auto stráví v placené stanici. Všimněte si rozdílu v použití funkce DATEDIFF v příkazu SELECT místo v podmínce 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

Aktualizace syntaxe dotazu úlohy streamování TollApp:

  1. Na stránce Přehled úlohy vyberte Zastavit.

  2. Chvíli počkejte na oznámení, že se úloha zastavila.

  3. Pod nadpisem TOPOLOGIE ÚLOHY vyberte <> Dotaz.

  4. Vložte upravený dotaz SQL streamování.

  5. Výběrem možnosti Uložit dotaz uložte. Potvrďte Ano , aby se změny uložily.

  6. Na stránce Přehled úlohy vyberte Spustit.

  7. V podokně Spustit úlohu vyberte Nyní.

Kontrola celkového času ve výstupu

Opakováním kroků v předchozí části zkontrolujte výstupní data služby Azure Cosmos DB z úlohy streamování. Projděte si nejnovější dokumenty JSON.

Tento dokument například ukazuje příklad auta s určitou registrační značkou, entrytime počítaným durationinminutes polem a exit timea DATEDIFF zobrazující dobu trvání placené stanice ve dvou minutách:

{
    "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
}

Hlášení vozidel s prošlou registrací

Azure Stream Analytics může použít statické snímky referenčních dat ke spojení s dočasnými datovými proudy. K předvedení této schopnosti použijte následující ukázkovou otázku. Vstup registrace je soubor JSON statického objektu blob, který obsahuje seznam vypršení platnosti značek licencí. Spojením na registrační značku se referenční data porovnávají s jednotlivými vozidly, která projíždějí mýtem.

Pokud je nákladní vozidlo registrováno u placené společnosti, může projít mýtnou kabinou, aniž by bylo zastaveno pro kontrolu. Pomocí vyhledávací tabulky registrace identifikujte všechna užitková vozidla, jejichž registrace vypršela.

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. Opakujte kroky v předchozí části a aktualizujte syntaxi dotazu úlohy streamování TollApp.

  2. Opakováním kroků v předchozí části zkontrolujte výstupní data služby Azure Cosmos DB z úlohy streamování.

Příklad výstupu:

    {
        "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
    }

Horizontální navýšení kapacity úlohy

Služba Azure Stream Analytics je navržená tak, aby elasticky škálovat, aby zvládla velké objemy dat. Dotaz Azure Stream Analytics může pomocí klauzule PARTITION BY říct systému, že se tento krok škáluje na více instancí. PartitionId je speciální sloupec, který systém přidá tak, aby odpovídal ID oddílu vstupu (centra událostí).

Pokud chcete škálovat dotaz na oddíly, upravte syntaxi dotazu na následující kód:

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

Vertikální navýšení kapacity úlohy streamování na více jednotek streamování:

  1. Zastavte aktuální úlohu.

  2. Aktualizujte syntaxi dotazu na <> stránce Dotaz a uložte změny.

  3. V části KONFIGUROVAT v úloze streamování vyberte Škálovat.

  4. Posuňte posuvník Jednotky streamování z 1 na 6. Jednotky streamování definují výpočetní výkon, který může úloha přijímat. Vyberte Uložit.

  5. Spusťte úlohu streamování a předveďte další škálování. Azure Stream Analytics distribuuje práci mezi více výpočetních prostředků a dosahuje lepší propustnosti tím, že rozděluje práci mezi prostředky pomocí sloupce určeného v klauzuli PARTITION BY.

Monitorování úlohy

Oblast MONITOR obsahuje statistiky o spuštěné úloze. K použití účtu úložiště ve stejné oblasti je potřeba první konfigurace (název poplatku jako ve zbytku tohoto dokumentu).

Monitorování úloh Azure Stream Analytics

K protokolům aktivit můžete přistupovat také z oblasti Nastavení řídicího panelu úloh.

Vyčištění prostředků TollApp

  1. Zastavte úlohu Stream Analytics v Azure Portal.

  2. Vyhledejte skupinu prostředků, která obsahuje osm prostředků souvisejících se šablonou TollApp.

  3. Vyberte Odstranit skupinu prostředků. Zadáním názvu skupiny prostředků potvrďte odstranění.

Závěr

Toto řešení vás seznámilo se službou Azure Stream Analytics. Ukázal, jak nakonfigurovat vstupy a výstupy pro úlohu Stream Analytics. Řešení s využitím scénáře Toll Data vysvětluje běžné typy problémů, které vznikají v prostoru přenášených dat, a způsob jejich řešení pomocí jednoduchých dotazů podobných SQL v Azure Stream Analytics. Řešení popisuje konstrukce rozšíření SQL pro práci s dočasnými daty. Ukázalo se, jak připojit datové streamy, jak datový proud rozšířit o statická referenční data a jak škálovat dotaz, aby se dosáhlo vyšší propustnosti.

I když toto řešení poskytuje dobrý úvod, není v žádném případě kompletní. Další vzory dotazů s využitím jazyka SAQL najdete v tématu Příklady dotazů pro běžné vzory použití Stream Analytics.