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.
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
Om du vill distribuera TollApp-miljön till Azure använder du den här länken för att distribuera TollApp Azure-mall.
Logga in på Azure Portal om du uppmanas att göra det.
Välj den prenumeration där de olika resurserna faktureras.
Ange en ny resursgrupp med ett unikt namn, till exempel
MyTollBooth
.Välj en Azure-plats.
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.
Kontrollera för att godkänna villkoren.
Välj Fäst på instrumentpanelen så att du enkelt kan hitta resurserna senare.
Välj Köp för att distribuera exempelmallen.
Efter en liten stund visas ett meddelande som bekräftar att distributionen lyckades.
Granska Azure Stream Analytics TollApp-resurser
Logga in på Azure-portalen.
Leta upp den resursgrupp som du namngav i föregående avsnitt.
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
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).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.
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.
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:
På sidan Översikt för jobbet väljer du Start.
I fönstret Starta jobb väljer du Nu.
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
Leta upp resursgruppen som innehåller TollApp-resurserna.
Välj Azure Cosmos DB-kontot med namnmönstret tollapp<random-cosmos>.
Välj rubriken Data Explorer för att öppna sidan Data Explorer.
Expandera tollAppDatabase>tollAppCollection>Documents.
I listan över ID:t visas flera dokument när utdata är tillgängliga.
Välj varje ID för att granska JSON-dokumentet. Observera varje
tollid
,windowend time
ochcount of cars
från det fönstret.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:
På sidan Översikt för jobbet väljer du Stoppa.
Vänta en stund på meddelandet om att jobbet har stoppats.
Under rubriken JOBBTOPOLOGI väljer du <> Fråga
Klistra in den justerade strömmande SQL-frågan.
Välj Spara för att spara frågan. Bekräfta Ja för att spara ändringarna.
På sidan Översikt för jobbet väljer du Start.
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'
Upprepa stegen i föregående avsnitt för att uppdatera frågesyntaxen för TollApp-strömningsjobbet.
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:
Stoppa det aktuella jobbet.
Uppdatera frågesyntaxen på <> sidan Fråga och spara ändringarna.
Under rubriken KONFIGURERA för strömningsjobbet väljer du Skala.
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.
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).
Du kan även komma åt aktivitetsloggar från jobbets instrumentpanel Inställningsområde .
Rensa TollApp-resurserna
Stoppa Stream Analytics-jobbet i Azure Portal.
Leta upp resursgruppen som innehåller åtta resurser som är relaterade till TollApp-mallen.
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.