Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Skapa en IoT-lösning med hjälp av Stream Analytics
Artikel
2024-12-27
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. Som en fullständigt hanterad dataflödesberäkningstjänst i realtid som finns i Microsoft Azure ger Azure Stream Analytics 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 direktuppspelningsjobb.
Formulera verkliga problem och lösa 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 säkerhet.
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:
En avgiftsbelagd station är ett vanligt fenomen. Du stöter på dem på många expresswayer, broar och tunnlar över hela världen. Varje avgiftsstation har flera avgiftsbelagda bås. I manuella bås stannar du för att betala avgiften till en dirigent. I automatiserade bås skannar en sensor ovanpå varje monter 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 genom 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 skapar den första strömmen. Den andra strömmen är en statisk uppslagsdatauppsättning som har fordonsregistreringsdata.
Dataström för inmatning
Dataströmmen för indata innehåller information om bilar när de kommer in på avgiftsbelagda stationer. Utgångsdatahändelserna strömmas live till en händelsehubb från en webbapp som ingår i exempelappen.
Det avgiftsbelagda monter-ID som unikt identifierar en avgiftsbelagd monter
EntryTime
Datum och tid för införsel av fordonet till vägtullsbåset i UTC
LicensePlate
Fordonets registreringsnummer
Tillstånd
Ett tillstånd i USA
Tillverka
Tillverkaren av bilen
Modell
Bilens modellnummer
VehicleType
Antingen 1 för personbilar eller 2 för nyttofordon
WeightType
Fordonsvikt i ton; 0 för personbilar
Toll
Avgiftsvärdet i USD
Tagg
E-taggen på bilen som automatiserar betalningen; tomt där betalningen gjordes manuellt
Avsluta dataström
Slutdataströmmen innehåller information om bilar som lämnar vägtullstationen. Utgångsdatahä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:00.0000000Z
JNB 7001
1
2014-09-10T12:03:00.0000000Z
YXZ 1001
3
2014-09-10T12:04:00.0000000Z
ABC 1004
2
2014-09-10T12:07:00.0000000Z
XYZ 1003
1
2014-09-10T12:08:00.00000000Z
BNJ 1007
2
2014-09-10T12:07:00.0000000Z
CDE 1007
Här är en kort beskrivning av kolumnerna:
Kolumn
beskrivning
TollID
Det avgiftsbelagda monter-ID som unikt identifierar en avgiftsbelagd monter
ExitTime
Datum och tid för avslut av fordonet från avgiftsbelagd monter i UTC
LicensePlate
Fordonets registreringsnummer
Registreringsdata för nyttofordon
Lösningen använder en statisk ögonblicksbild av en registreringsdatabas för 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
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 skickas till en händelsehubb.
Kontrollera om du vill 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 stund visas ett meddelande som bekräftar att distributionen lyckades.
Granska Azure Stream Analytics TollApp-resurser
Logga in på Azure-portalen.
Leta upp resursgruppen 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å webbappar
Granska TollApp-exempeljobbet
Från och med 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
Om du vill parafrasera syftet med frågan ska 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 entréhändelser analoga med en ström som aldrig stannar. För att kvantifiera strö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 rullande antal.
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 indata efterfrågas i FROM-satsen för 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. Den här 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. Den här referensdatainmatningen 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 strömningsjobbet:
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 Azure Cosmos DB-utdata
Leta upp resursgruppen som innehåller TollApp-resurserna.
Välj Azure Cosmos DB-kontot med namnmönstret tollapp<random-cosmos>.
Välj rubriken Datautforskaren för att öppna sidan Datautforskaren.
I listan över ID:er visas flera dokument när utdata är tillgängliga.
Välj varje ID för att granska JSON-dokumentet. Observera varje tollid, windowend timeoch count 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 vägtullen hjälper till att bedöma effektiviteten i processen och kundupplevelsen.
Om du vill hitta den totala tiden ansluter du EntryTime-strömmen till ExitTime-strömmen. Anslut de två indataströmmarna till kolumnerna TollId och LicensePlate. 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 i vägtullstationen. Observera skillnaden i 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ömningsjobbet:
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.
Spara frågan genom att välja Spara . 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.
I det här dokumentet visas till exempel en bil med en viss registreringsskylt, entrytime fältet och exit time, och det BERÄKNADE durationinminutes DATEIFF-fältet som visar varaktigheten för avgiftsbelagda bås som två minuter:
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 statisk blob-json-fil 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 vägtullföretaget kan det passera genom avgiftsbåset utan att stoppas för inspektion. Använd uppslagstabellen för registrering för att identifiera alla kommersiella fordon som har upphört att registreras.
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ömmande jobb.
Upprepa stegen i föregående avsnitt för att granska Azure Cosmos DB-utdata från strömningsjobbet.
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 för indata (händelsehubb).
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 direktuppspelningsjobbet väljer du Skala.
Skjut skjutreglaget för strömningsenheter 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örsta gången konfiguration krävs för att använda lagringskontot i samma region (namntull som resten av det här dokumentet).
Du kan också komma åt aktivitetsloggar från området Inställningar för jobbinstrumentpanelen.
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 scenariot med avgiftsbelagda data förklarade lösningen vanliga typer av problem som uppstår i utrymmet för 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 berikar dataströmmen med statiska referensdata och hur du skalar ut en fråga för att uppnå högre dataflöde.
Azure Stream Analytics tillhandahåller en databearbetningsmotor i realtid som du kan använda för att mata in strömmande händelsedata i Azure Synapse Analytics för ytterligare analys och rapportering.