Skapa en IoT-lösning med Stream Analytics

Introduktion

I den här lösningen får du lära dig hur du använder Azure Stream Analytics för att få insikter i realtid från dina data. Utvecklare kan enkelt kombinera dataströmmar, till exempel klickströmmar, loggar och enhetsgenererade händelser, med historiska poster eller referensdata för att härleda affärsinsikter. Azure Stream Analytics är en fullständigt hanterad dataströmsberäkningstjänst i realtid som finns i Microsoft Azure och ger inbyggd återhämtning, låg svarstid och skalbarhet för att komma igång på några minuter.

När du har slutfört den här lösningen kan du:

  • Bekanta dig med Azure Stream Analytics-portalen.
  • Konfigurera och distribuera ett strömningsjobb.
  • Formulera verkliga problem och lös dem med hjälp av Stream Analytics-frågespråket.
  • Utveckla strömningslösningar för dina kunder med hjälp av Stream Analytics med tillförsikt.
  • Använd övervaknings- och loggningsupplevelsen för att felsöka problem.

Förutsättningar

Du behöver följande förutsättningar för att slutföra den här lösningen:

Scenariointroduktion: "Hello, Toll!"

En avgiftsbelagd station är ett vanligt fenomen. Du stöter på dem på många expressvägar, broar och tunnlar över hela världen. Varje avgiftsbelagd station har flera avgiftsbelagda bås. Vid manuella bås stannar du för att betala avgiften till en dirigering. Vid automatiserade bås skannar en sensor ovanpå varje bås ett RFID-kort som fästs på vindrutan på ditt fordon när du passerar vägtullsbåset. Det är enkelt att visualisera passagen av fordon via dessa avgiftsbelagda stationer som en händelseström över vilken intressanta åtgärder kan utföras.

Bild på bilar i avgiftsbelagda bås

Inkommande data

Den här lösningen fungerar med två dataströmmar. Sensorer som är installerade i in- och utfarten till avgiftsstationerna producerar den första strömmen. Den andra strömmen är en statisk uppslagsdatauppsättning som har fordonsregistreringsdata.

Dataström för inmatning

Dataströmmen innehåller information om bilar när de kommer in på avgiftsbelagda stationer. Avslutsdatahändelserna strömmas live till en händelsehubb från en webbapp som ingår i exempelappen.

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

Här är en kort beskrivning av kolumnerna:

Kolumn Beskrivning
TollID Det avgiftsbelagda monter-ID som unikt identifierar ett vägtullsbås
EntryTime Datum och tid för inresa för fordonet till vägtullsbås i UTC
LicensePlate Fordonets registreringsnummer
Tillstånd Ett tillstånd i USA
Modell Tillverkaren av bilen
Modell Modellnumret för bilen
VehicleType Antingen 1 för personbilar eller 2 för nyttofordon
WeightType Fordonsvikt i ton; 0 för personbilar
Vägtull Det avgiftsbelagda värdet i USD
Tagg E-taggen på bilen som automatiserar betalningen; tomt där betalningen gjordes manuellt

Avsluta dataström

Avslutsdataströmmen innehåller information om bilar som lämnar tullstationen. Avslutsdatahändelserna strömmas live till en händelsehubb från en webbapp som ingår i exempelappen.

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

Här är en kort beskrivning av kolumnerna:

Kolumn Beskrivning
TollID Det avgiftsbelagda monter-ID som unikt identifierar ett vägtullsbås
ExitTime Datum och tid för avfart av fordonet från vägtullsbås i UTC
LicensePlate Fordonets registreringsnummer

Registreringsdata för kommersiella fordon

Lösningen använder en statisk ögonblicksbild av en databas för registrering av kommersiella fordon. Dessa data sparas som en JSON-fil i Azure Blob Storage, som ingår i exemplet.

LicensePlate RegistrationId Upphörd
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
RIV 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

Här är en kort beskrivning av kolumnerna:

Kolumn Beskrivning
LicensePlate Fordonets registreringsnummer
RegistrationId Fordonets registrerings-ID
Upphörd Fordonets registreringsstatus: 0 om fordonsregistreringen är aktiv, 1 om registreringen har upphört att gälla

Konfigurera miljön för Azure Stream Analytics

För att slutföra den här lösningen behöver du en Microsoft Azure-prenumeration. Om du inte har något Azure-konto kan du begära en kostnadsfri utvärderingsversion.

Se till att följa stegen i avsnittet "Rensa ditt Azure-konto" i slutet av den här artikeln så att du kan använda din Azure-kredit på bästa sätt.

Distribuera exemplet

Det finns flera resurser som enkelt kan distribueras i en resursgrupp tillsammans med några få klick. Lösningsdefinitionen finns på GitHub-lagringsplatsen på https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

Distribuera TollApp-mallen i Azure Portal

  1. Om du vill distribuera TollApp-miljön till Azure använder du den här länken för att distribuera TollApp Azure-mall.

  2. Logga in på Azure Portal om du uppmanas att göra det.

  3. Välj den prenumeration där de olika resurserna faktureras.

  4. Ange en ny resursgrupp med ett unikt namn, till exempel MyTollBooth.

  5. Välj en Azure-plats.

  6. Ange ett intervall som ett antal sekunder. Det här värdet används i exempelwebbappen för hur ofta data ska skickas till en händelsehubb.

  7. Kontrollera för att godkänna villkoren.

  8. Välj Fäst på instrumentpanelen så att du enkelt kan hitta resurserna senare.

  9. Välj Köp för att distribuera exempelmallen.

  10. Efter en liten stund visas ett meddelande som bekräftar att distributionen lyckades.

Granska Azure Stream Analytics TollApp-resurser

  1. Logga in på Azure-portalen.

  2. Leta upp den resursgrupp som du namngav i föregående avsnitt.

  3. Kontrollera att följande resurser visas i resursgruppen:

    • Ett Azure Cosmos DB-konto
    • Ett Azure Stream Analytics-jobb
    • Ett Azure Storage-konto
    • En Azure-händelsehubb
    • Två Web Apps

Granska TollApp-exempeljobbet

  1. Från resursgruppen i föregående avsnitt väljer du Stream Analytics-strömningsjobbet som börjar med namnet tollapp (namnet innehåller slumpmässiga tecken för unikhet).

  2. På sidan Översikt för jobbet ser du rutan Fråga för att visa frågesyntaxen.

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

    För att parafrasera frågans avsikt kan vi säga att du måste räkna antalet fordon som anger en avgiftsbelagd monter. Eftersom en vägtullsbås har en kontinuerlig ström av fordon som kommer in är det ingångshändelser som liknar en ström som aldrig stannar. Om du vill kvantifiera dataströmmen måste du definiera en "tidsperiod" för att mäta över. Låt oss förfina frågan ytterligare, till "Hur många fordon kommer in i en avgiftsbelagd monter var tredje minut?" Detta kallas ofta för tumbling count.

    Som du ser använder Azure Stream Analytics ett frågespråk som liknar SQL och lägger till några tillägg för att ange tidsrelaterade aspekter av frågan. Mer information finns i avsnittet om tidshantering och fönsterkonstruktioner som används i frågan.

  3. Granska indata för TollApp-exempeljobbet. Endast EntryStream-indata används i den aktuella frågan.

    • EntryStream-indata är en händelsehubbanslutning som köar data som representerar varje gång en bil går in i en vägtull på motorvägen. En webbapp som ingår i exemplet skapar händelserna och dessa data placeras i kö i den här händelsehubben. Observera att dessa indata efterfrågas i FROM-satsen i strömningsfrågan.
    • ExitStream-indata är en händelsehubbanslutning som köar data som representerar varje gång en bil lämnar en vägtull på motorvägen. Dessa strömmande indata används i senare varianter av frågesyntaxen.
    • Registreringsindata är en Azure Blob Storage-anslutning som pekar på en statisk registration.json-fil som används för sökningar efter behov. Dessa referensdataindata används i senare varianter av frågesyntaxen.
  4. Granska utdata för TollApp-exempeljobbet.

    • Azure Cosmos DB-utdata är en Azure Cosmos DB-databascontainer som tar emot utdatamottagarens händelser. Observera att dessa utdata används i INTO-satsen i strömningsfrågan.

Starta TollApp-strömningsjobbet

Följ dessa steg för att starta direktuppspelningsjobbet:

  1. På sidan Översikt för jobbet väljer du Start.

  2. I fönstret Starta jobb väljer du Nu.

  3. Efter en liten stund, när jobbet körs, visar du diagrammet Övervakning på sidan Översikt för strömningsjobbet. Diagrammet bör visa flera tusen indatahändelser och tiotals utdatahändelser.

Granska Utdata för Azure Cosmos DB

  1. Leta upp resursgruppen som innehåller TollApp-resurserna.

  2. Välj Azure Cosmos DB-kontot med namnmönstret tollapp<random-cosmos>.

  3. Välj rubriken Data Explorer för att öppna sidan Data Explorer.

  4. Expandera tollAppDatabase>tollAppCollection>Documents.

  5. I listan över ID:t visas flera dokument när utdata är tillgängliga.

  6. Välj varje ID för att granska JSON-dokumentet. Observera varje tollid, windowend timeoch count of cars från det fönstret.

  7. Efter ytterligare tre minuter är en annan uppsättning med fyra dokument tillgängliga, ett dokument per tollid.

Rapportera total tid för varje bil

Den genomsnittliga tid som krävs för att en bil ska passera genom vägtullen hjälper till att utvärdera effektiviteten i processen och kundupplevelsen.

Om du vill hitta den totala tiden ansluter du EntryTime-strömmen till ExitTime-strömmen. Koppla de två indataströmmarna till kolumnerna TollId och LicencePlate. Join-operatorn kräver att du anger tidsmässigt spelrum som beskriver den godkända tidsskillnaden mellan de anslutna händelserna. Använd funktionen DATEDIFF för att ange att händelserna inte ska vara längre än 15 minuter från varandra. Använd också funktionen DATEDIFF för att avsluta och ange tider för att beräkna den faktiska tid som en bil spenderar på avgiftsbelagda stationer. Observera skillnaden mellan användningen av DATEDIFF när den används i en SELECT-instruktion i stället för ett JOIN-villkor .

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

Så här uppdaterar du frågesyntaxen för TollApp-strömningsjobb:

  1. På sidan Översikt för jobbet väljer du Stoppa.

  2. Vänta en stund på meddelandet om att jobbet har stoppats.

  3. Under rubriken JOBBTOPOLOGI väljer du <> Fråga

  4. Klistra in den justerade strömmande SQL-frågan.

  5. Välj Spara för att spara frågan. Bekräfta Ja för att spara ändringarna.

  6. På sidan Översikt för jobbet väljer du Start.

  7. I fönstret Starta jobb väljer du Nu.

Granska den totala tiden i utdata

Upprepa stegen i föregående avsnitt för att granska Azure Cosmos DB-utdata från strömningsjobbet. Granska de senaste JSON-dokumenten.

Det här dokumentet visar till exempel en exempelbil med en viss registreringsskylt, entrytime och exit time, och det beräknade durationinminutes FÄLTET DATEDIFF som visar varaktigheten för den avgiftsbelagda montern som två minuter:

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

Rapportera fordon med förfallen registrering

Azure Stream Analytics kan använda statiska ögonblicksbilder av referensdata för att ansluta till temporala dataströmmar. Använd följande exempelfråga för att demonstrera den här funktionen. Registreringsindata är en json-fil för statisk blob som visar förfallodatum för licenstaggar. Genom att ansluta på registreringsskylten jämförs referensdata med varje fordon som passerar genom vägtullen båda.

Om ett nyttofordon är registrerat hos det avgiftsbelagda företaget kan det passera genom vägtullsbåset utan att stoppas för inspektion. Använd registreringsuppslagstabellen för att identifiera alla kommersiella fordon som har upphört att gälla registreringar.

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. Upprepa stegen i föregående avsnitt för att uppdatera frågesyntaxen för TollApp-strömningsjobbet.

  2. Upprepa stegen i föregående avsnitt för att granska Azure Cosmos DB-utdata från strömningsjobbet.

Exempel på utdata:

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

Skala ut jobbet

Azure Stream Analytics är utformat för elastisk skalning så att det kan hantera stora mängder data. Azure Stream Analytics-frågan kan använda en PARTITION BY-sats för att meddela systemet att det här steget skalar ut. PartitionId är en särskild kolumn som systemet lägger till för att matcha partitions-ID:t för indata (händelsehubben).

Om du vill skala ut frågan till partitioner redigerar du frågesyntaxen till följande 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

Så här skalar du upp strömningsjobbet till fler strömningsenheter:

  1. Stoppa det aktuella jobbet.

  2. Uppdatera frågesyntaxen på <> sidan Fråga och spara ändringarna.

  3. Under rubriken KONFIGURERA för strömningsjobbet väljer du Skala.

  4. Dra skjutreglaget för enheter för direktuppspelning från 1 till 6. Strömningsenheter definierar mängden beräkningskraft som jobbet kan ta emot. Välj Spara.

  5. Starta strömningsjobbet för att demonstrera den ytterligare skalan. Azure Stream Analytics distribuerar arbete över fler beräkningsresurser och uppnår bättre dataflöde och partitionerar arbetet mellan resurser med hjälp av kolumnen som anges i PARTITION BY-satsen.

Övervaka jobbet

Området MONITOR innehåller statistik om det jobb som körs. Förstagångskonfiguration krävs för att använda lagringskontot i samma region (namntull som resten av det här dokumentet).

Azure Stream Analytics-jobbövervakning

Du kan även komma åt aktivitetsloggar från jobbets instrumentpanel Inställningsområde .

Rensa TollApp-resurserna

  1. Stoppa Stream Analytics-jobbet i Azure Portal.

  2. Leta upp resursgruppen som innehåller åtta resurser som är relaterade till TollApp-mallen.

  3. Välj Ta bort resursgrupp. Ange namnet på resursgruppen för att bekräfta borttagningen.

Slutsats

Den här lösningen introducerade dig för Azure Stream Analytics-tjänsten. Den visade hur du konfigurerar indata och utdata för Stream Analytics-jobbet. Med hjälp av toll-data-scenariot förklarade lösningen vanliga typer av problem som uppstår i mängden data i rörelse och hur de kan lösas med enkla SQL-liknande frågor i Azure Stream Analytics. Lösningen beskrev SQL-tilläggskonstruktioner för att arbeta med temporala data. Den visade hur du ansluter dataströmmar, hur du utökar dataströmmen med statiska referensdata och hur du skalar ut en fråga för att uppnå högre dataflöde.

Även om den här lösningen ger en bra introduktion är den inte fullständig på något sätt. Du hittar fler frågemönster med hjälp av SAQL-språket i Frågeexempel för vanliga Stream Analytics-användningsmönster.