Dela via


Skapa en IoT-lösning med hjälp av 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. 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:

Scenariointroduktion: "Hello, Toll!"

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.

Bild av 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 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.

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

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.

Följ 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 skickas till en händelsehubb.

  7. Kontrollera om du vill 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 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 resursgruppen 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å webbappar

Granska TollApp-exempeljobbet

  1. 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).

  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
    

    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.

  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 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.
  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 strömningsjobbet:

  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 Azure Cosmos DB-utdata

  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 Datautforskaren för att öppna sidan Datautforskaren.

  4. Expandera tollAppDatabase tollAppCollection-dokument.>>

  5. I listan över ID:er 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 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:

  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. Spara frågan genom att välja Spara . 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.

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:

{
    "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 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'
  1. Upprepa stegen i föregående avsnitt för att uppdatera frågesyntaxen för TollApp-strömmande jobb.

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

  1. Stoppa det aktuella jobbet.

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

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

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

  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örsta gången konfiguration 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 också komma åt aktivitetsloggar från området Inställningar för jobbinstrumentpanelen.

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

Även om den här lösningen ger en bra introduktion är den inte komplett 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.