Sdílet prostřednictvím


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 streamy dat, jako jsou streamy kliknutí, protokoly a události generované zařízením, s historickými záznamy nebo referenčními daty, které odvozují 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í začít v řádu minut.

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

  • Seznamte se s portálem Azure Stream Analytics.
  • Nakonfigurujte a nasaďte úlohu streamování.
  • Vyřešte 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 pomocí Stream Analytics s jistotou.
  • K řešení problémů použ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ý jev. Setkáte se s nimi na mnoha expresswayích, mostech a tunelech po celém světě. Každá placená stanice má několik bezplatných stánků. V manuálních stánkech přestanete platit placenou linku telefonicky. V automatizovaných stánkech senzor nad každou kabinou naskenuje kartu RFID, která je připevněná k čelnímu skle vozidla při průchodu placenou kabinou. Je snadné vizualizovat průchod vozidel přes tyto placené stanice jako datový proud událostí, přes který se dají provádět zajímavé operace.

Obrázek aut na placené stánky

Příchozí data

Toto řešení funguje se dvěma datovými proudy. Senzory instalované ve vstupním a výstupním výstupu placené stanice vytvářejí první proud. Druhý datový proud je statická datová sada vyhledávání, která obsahuje data registrace vozidel.

Datový proud pro zadávání dat

Vstupní datový proud obsahuje informace o autech při vstupu do placených stanic. Výstupní datové události 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 krátký popis sloupců:

Sloupec Popis
TollID ID placené linky, která jednoznačně identifikuje placenou kabinu
EntryTime Datum a čas vstupu vozidla do placené linky ve standardu UTC
Licenčníplate Číslo průkazu vozidla
State Stav v USA
Značka Výrobce automobilu
Model Číslo modelu automobilu
VehicleType Buď 1 pro osobní vozidla, nebo 2 pro obchodní vozidla
WeightType Hmotnost vozidla v tunách; 0 pro osobní vozidla
Řekněte Hodnota placené linky v USD
Značka Značka e-Tag na automobilech, která automatizuje platby; prázdné místo, kde byla platba provedena ručně

Ukončení datového proudu

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

TollId ExitTime Licenčníplate
0 2014-09-10T12:03:00.0000000Z JNB 7001
0 2014-09-10T12:03:00.0000000Z YXZ 1001
3 2014-09-10T12:04:00.000000Z ABC 1004
2 2014-09-10T12:07:00.0000000Z XYZ 1003
0 2014-09-10T12:08:00.0000000Z BNJ 1007
2 2014-09-10T12:07:00.0000000Z CDE 1007

Tady je krátký popis sloupců:

Sloupec Popis
TollID ID placené linky, která jednoznačně identifikuje placenou kabinu
ExitTime Datum a čas ukončení vozidla z placené linky v UTC
Licenčníplate Číslo průkazu vozidla

Údaje o registraci komerčních vozidel

Řešení používá statický snímek databáze pro registraci komerčních vozidel. Tato data se ukládají jako soubor JSON do služby Azure Blob Storage, která je součástí ukázky.

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

Tady je krátký popis sloupců:

Sloupec Popis
Licenčníplate Číslo průkazu vozidla
ID registrace ID registrace vozidla
Platnost vypršela Stav registrace vozidla: 0, pokud je registrace vozidla aktivní, 1, pokud platnost 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 nejlépe využít kredit Azure.

Nasazení ukázky

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

Nasazení šablony TollApp na webu Azure Portal

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

  2. Pokud se zobrazí výzva, přihlaste se k webu 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 pro četnost odesílání dat 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 nasadíte ukázkovou šablonu.

  10. Po chvíli se zobrazí oznámení, které potvrdí úspěšné nasazení.

Kontrola prostředků Azure Stream Analytics TollApp

  1. Přihlaste se k portálu Azure.

  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 služby Azure Storage
    • Jedno centrum událostí Azure
    • Dvě webové aplikace

Prozkoumání ukázkové úlohy TollApp

  1. Počínaje skupinou prostředků v předchozí části vyberte úlohu streamování Stream Analytics počínaje názvem tollapp (název obsahuje náhodné znaky pro jedinečnost).

  2. Na stránce Přehled úlohy si všimněte pole Dotaz pro zobrazení syntaxe dotazu.

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

    Pokud chcete parafrázovat záměr dotazu, řekněme, že potřebujete spočítat počet vozidel, která vstoupí do placené kabiny. Vzhledem k tomu, že dálniční placená kabina má nepřetržitý proud vozidel vstupujících do provozu, jsou tyto vstupní události analogické ke proudu, který se nikdy nezastaví. Pokud chcete kvantifikovat datový proud, musíte definovat "časové období", které se má měřit. Pojďme otázku dále upřesnit na otázku "Kolik vozidel vstupuje do placené kabiny každé tři minuty?" To se běžně označuje jako počet přeskakujícího počtu.

    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 tématu o konstruktech správy času a 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í centra událostí, které zařadí data do fronty při každém vstupu auta na dálnici. Webová aplikace, která je součástí ukázky, vytváří události a tato data se zařadí do fronty v tomto centru událostí. Všimněte si, že tento vstup se dotazuje v klauzuli FROM dotazu streamování.
    • Vstup ExitStream je připojení centra událostí, které zařadí data do fronty při každém ukončení auta na dálnici. Tento vstup streamování se používá v pozdějších variantách syntaxe dotazu.
    • Vstup registrace je připojení k úložišti objektů blob v Azure, které ukazuje na statický soubor 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. Prozkoumejte výstupy ukázkové úlohy TollAppu.

    • Výstup 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

Pokud chcete spustit úlohu streamování, postupujte 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 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 Průzkumník dat otevřete stránku Průzkumník dat.

  4. Rozbalte tollAppDatabase>tollAppCollection>Documents.

  5. V seznamu ID se po zpřístupnění výstupu zobrazí několik dokumentů.

  6. Výběrem každého ID zkontrolujte dokument JSON. Všimněte si každého tollidz windowend timenich a count of cars z okna.

  7. Po dalších třech minutách je k dispozici další sada čtyř dokumentů, jeden dokument na tollidjeden .

Report total time for each car

Průměrná doba potřebná k průchodu placené linky pomáhá vyhodnotit efektivitu procesu a zkušeností zákazníků.

Pokud chcete zjistit celkovou dobu, připojte se ke streamu EntryTime s datovým proudem ExitTime. Spojte dva vstupní datové proudy se stejnými sloupci TollId a LicensePlate. Operátor JOIN vyžaduje, abyste zadali dočasný leeway, který popisuje přijatelný časový rozdíl mezi připojenými událostmi. Pomocí funkce DATEDIFF určete, že události by neměly být delší než 15 minut od sebe. Také použijte funkci DATEDIFF k ukončení a vstupu časy pro výpočet skutečného času, který auto stráví na placené stanici. Všimněte si rozdílu použití funkce DATEDIFF, když se používá v příkazu SELECT, nikoli 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 a uložte změny.

  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 azure Cosmos DB z úlohy streamování. Projděte si nejnovější dokumenty JSON.

Tento dokument například ukazuje příklad auta s určitým licenčním štítkem, entrytime exit timepočítaným polem a a počítaným durationinminutes polem DATEDIFF zobrazující dobu trvání placené linky 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 pro spojení s dočasnými datovými proudy. K předvedení této funkce 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ím průkazu se referenční údaje porovnávají s jednotlivými vozidly procházející placenou linkou.

Pokud je u placené společnosti zaregistrované komerční vozidlo, může projít bezplatnou kabinou, aniž by se zastavila kontrola. Pomocí vyhledávací tabulky registrace identifikujte všechna obchodní vozidla, jejichž platnost 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 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

Azure Stream Analytics je navržený tak, aby elasticky škálovat, aby mohl zpracovávat velké objemy dat. Dotaz Azure Stream Analytics může pomocí klauzule PARTITION BY sdělit 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 dotaz škálovat 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. Posunutí posuvníku jednotek streamování od 1 do 6 Jednotky streamování definují výpočetní výkon, který může úloha přijímat. Zvolte 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 a 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. První konfigurace je nutná k použití účtu úložiště ve stejné oblasti (název placené linky jako zbytek tohoto dokumentu).

Monitorování úloh Azure Stream Analytics

Protokoly aktivit můžete získat také z oblasti Nastavení řídicího panelu úloh.

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

  1. Zastavte úlohu Stream Analytics na webu Azure Portal.

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

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

Závěr

Toto řešení vás představilo do služby Azure Stream Analytics. Ukázalo se, jak nakonfigurovat vstupy a výstupy pro úlohu Stream Analytics. Při použití scénáře Placená data řešení vysvětlilo běžné typy problémů, které vznikají v prostoru dat v pohybu a jak je lze vyřešit pomocí jednoduchých dotazů podobných SQL ve službě Azure Stream Analytics. Řešení popisuje konstrukty rozšíření SQL pro práci s dočasnými daty. Ukázalo se, jak spojit datové proudy, jak rozšířit datový proud statickými referenčními daty a jak škálovat dotaz tak, aby dosáhl vyšší propustnosti.

I když toto řešení poskytuje dobrý úvod, není to žádným způsobem dokončeno. Další vzory dotazů s využitím jazyka SAQL najdete v příkladech dotazů pro běžné vzory použití Stream Analytics.