Een IoT-oplossing bouwen met behulp van Stream Analytics

Introductie

In deze oplossing leert u hoe u Azure Stream Analytics gebruikt om realtime inzichten uit uw gegevens te verkrijgen. Ontwikkelaars kunnen gegevensstromen, zoals klikstromen, logboeken en apparaatgegenereerde gebeurtenissen, eenvoudig combineren met historische records of referentiegegevens om zakelijke inzichten af te leiden. Als een volledig beheerde, realtime streamberekeningsservice die wordt gehost in Microsoft Azure, biedt Azure Stream Analytics ingebouwde tolerantie, lage latentie en schaalbaarheid, zodat u binnen enkele minuten aan de slag kunt.

Nadat u deze oplossing hebt voltooid, kunt u het volgende doen:

  • Maak uzelf vertrouwd met de Azure Stream Analytics-portal.
  • Een streamingtaak configureren en implementeren.
  • Verwoord echte problemen en los ze op met behulp van de Stream Analytics-querytaal.
  • Ontwikkel met vertrouwen streamingoplossingen voor uw klanten met behulp van Stream Analytics.
  • Gebruik de bewakings- en logboekregistratie-ervaring om problemen op te lossen.

Vereisten

U hebt de volgende vereisten nodig om deze oplossing te voltooien:

Inleiding tot scenario: 'Hallo, betaald!'

Een tolstation is een veelvoorkomend fenomeen. U komt ze tegen op veel snelwegen, bruggen en tunnels over de hele wereld. Elk tolstation heeft meerdere tolhuisjes. Bij handmatige cabines stop je om de tol te betalen aan een begeleider. Bij geautomatiseerde cabines scant een sensor boven op elke stand een RFID-kaart die op de voorruit van uw voertuig wordt bevestigd wanneer u het tolhuisje passeert. Het is eenvoudig om de passage van voertuigen door deze tolstations te visualiseren als een gebeurtenisstroom waarover interessante bewerkingen kunnen worden uitgevoerd.

Foto van auto's bij tolhuisjes

Binnenkomende gegevens

Deze oplossing werkt met twee gegevensstromen. Sensoren die in de in- en uitgang van de tolstations zijn geïnstalleerd, produceren de eerste stroom. De tweede stroom is een statische opzoekgegevensset met voertuigregistratiegegevens.

Invoergegevensstroom

De invoergegevensstroom bevat informatie over auto's die tolstations binnenrijden. De afsluitgegevensgebeurtenissen worden live gestreamd naar een Event Hub vanuit een web-app die is opgenomen in de voorbeeld-app.

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

Hier volgt een korte beschrijving van de kolommen:

Kolom Beschrijving
TollID De tolhuisje-id die een tolhuisje uniek identificeert
EntryTime De datum en tijd van het invoeren van het voertuig bij het tolhuisje in UTC
Licentieplaat Het kenteken van het voertuig
Staat Een status in Verenigde Staten
Merk De fabrikant van de auto
Model Het modelnummer van de auto
Voertuigtype 1 voor personenvoertuigen of 2 voor bedrijfsvoertuigen
Gewichtstype Voertuiggewicht in tonnen; 0 voor personenvoertuigen
Tol De betaalde waarde in USD
Tag De e-Tag op de auto die de betaling automatiseert; leeg waar de betaling handmatig is uitgevoerd

Gegevensstroom afsluiten

De uitgangsgegevensstroom bevat informatie over auto's die het tolstation verlaten. De afsluitgegevensgebeurtenissen worden live gestreamd naar een Event Hub vanuit een web-app die is opgenomen in de voorbeeld-app.

TollId ExitTime Licentieplaat
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

Hier volgt een korte beschrijving van de kolommen:

Kolom Beschrijving
TollID De tolhuisje-id die een tolhuisje uniek identificeert
ExitTime De datum en tijd van het verlaten van het voertuig vanaf tolhuisje in UTC
Licentieplaat Het kenteken van het voertuig

Registratiegegevens van bedrijfsvoertuigen

De oplossing maakt gebruik van een statische momentopname van een registratiedatabase voor bedrijfsvoertuigen. Deze gegevens worden opgeslagen als een JSON-bestand in Azure Blob Storage, dat is opgenomen in het voorbeeld.

Licentieplaat RegistrationId Verlopen
SVT 6023 285429838 1
XLZ 3463 362715656 0
BAC 1005 876133137 1
NORMAND 8632 992711956 0
SNY 7188 592133890 0
ELH 9896 678427724 1

Hier volgt een korte beschrijving van de kolommen:

Kolom Beschrijving
Licentieplaat Het kenteken van het voertuig
RegistrationId De registratie-id van het voertuig
Verlopen De registratiestatus van het voertuig: 0 als de voertuigregistratie actief is, 1 als de registratie is verlopen

De omgeving instellen voor Azure Stream Analytics

Als u deze oplossing wilt voltooien, hebt u een Microsoft Azure-abonnement nodig. Als u geen Azure-account hebt, kunt u een gratis proefversie aanvragen.

Volg de stappen in de sectie Uw Azure-account opschonen aan het einde van dit artikel, zodat u optimaal gebruik kunt maken van uw Azure-tegoed.

Het voorbeeld implementeren

Er zijn verschillende resources die eenvoudig met een paar klikken in een resourcegroep kunnen worden geïmplementeerd. De oplossingsdefinitie wordt gehost in de GitHub-opslagplaats op https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.

De TollApp-sjabloon implementeren in de Azure Portal

  1. Als u de TollApp-omgeving wilt implementeren in Azure, gebruikt u deze koppeling naar TollApp Azure-sjabloon implementeren.

  2. Meld u aan bij de Azure Portal als u hierom wordt gevraagd.

  3. Kies het abonnement waarin de verschillende resources worden gefactureerd.

  4. Geef een nieuwe resourcegroep op, met een unieke naam, bijvoorbeeld MyTollBooth.

  5. Selecteer een Azure-locatie.

  6. Geef een interval op als een aantal seconden. Deze waarde wordt gebruikt in de voorbeeld-web-app, voor hoe vaak gegevens naar een Event Hub moeten worden verzonden.

  7. Controleer of u akkoord gaat met de voorwaarden.

  8. Selecteer Vastmaken aan dashboard zodat u de resources later gemakkelijk kunt vinden.

  9. Selecteer Kopen om de voorbeeldsjabloon te implementeren.

  10. Na enkele ogenblikpen verschijnt er een melding om te bevestigen dat de implementatie is voltooid.

Bekijk de Azure Stream Analytics TollApp-resources

  1. Meld u aan bij Azure Portal.

  2. Zoek de resourcegroep die u in de vorige sectie hebt benoemd.

  3. Controleer of de volgende resources worden vermeld in de resourcegroep:

    • Eén Azure Cosmos DB-account
    • Eén Azure Stream Analytics-taak
    • Eén Azure Storage-account
    • Eén Azure Event Hub
    • Twee Web Apps

De voorbeeldtaak TollApp onderzoeken

  1. Vanaf de resourcegroep in de vorige sectie selecteert u de Stream Analytics-streamingtaak die begint met de naam tollapp (naam bevat willekeurige tekens voor uniekheid).

  2. Op de pagina Overzicht van de taak ziet u het vak Query om de querysyntaxis weer te geven.

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

    Om de intentie van de query te parafraseren, moet u het aantal voertuigen tellen dat een tolpoort binnenkomt. Omdat een tolhuisje een doorlopende stroom voertuigen heeft die binnenkomen, zijn dat ingangsgebeurtenissen vergelijkbaar met een stroom die nooit stopt. Als u de stroom wilt kwantificeren, moet u een 'tijdsperiode' definiëren om over te meten. Laten we de vraag verder verfijnen, naar 'Hoeveel voertuigen komen elke drie minuten in een tolhuisje?' Dit wordt meestal aangeduid als de tumblingtelling.

    Zoals u ziet, gebruikt Azure Stream Analytics een querytaal die vergelijkbaar is met SQL en voegt een aantal extensies toe om tijdgerelateerde aspecten van de query op te geven. Lees voor meer informatie over Time Management - en Windowing-constructies die in de query worden gebruikt.

  3. Bekijk de invoer van de TollApp-voorbeeldtaak. Alleen de EntryStream-invoer wordt gebruikt in de huidige query.

    • EntryStream-invoer is een Event Hub-verbinding die gegevens in de wachtrij zet die telkens worden weergegeven wanneer een auto een tolpoort op de snelweg binnenrijd. Een web-app die deel uitmaakt van het voorbeeld maakt de gebeurtenissen en die gegevens worden in de wachtrij geplaatst in deze Event Hub. Houd er rekening mee dat deze invoer wordt opgevraagd in de FROM-component van de streamingquery.
    • ExitStream-invoer is een Event Hub-verbinding waarmee gegevens in de wachtrij worden geplaatst die elke keer worden weergegeven wanneer een auto een tolpoort verlaat op de snelweg. Deze streaming-invoer wordt gebruikt in latere variaties van de querysyntaxis.
    • Registratie-invoer is een Azure Blob Storage-verbinding die verwijst naar een statisch registration.json-bestand, dat indien nodig wordt gebruikt voor zoekacties. Deze verwijzingsgegevensinvoer wordt gebruikt in latere variaties van de querysyntaxis.
  4. Bekijk de uitvoer van de voorbeeldtaak TollApp.

    • Azure Cosmos DB-uitvoer is een Azure Cosmos DB-databasecontainer die de uitvoer-sink-gebeurtenissen ontvangt. Houd er rekening mee dat deze uitvoer wordt gebruikt in de INTO-component van de streamingquery.

De TollApp-streamingtaak starten

Volg deze stappen om de streamingtaak te starten:

  1. Selecteer Op de pagina Overzicht van de taak de optie Starten.

  2. Selecteer in het deelvenster Taak starten de optie Nu.

  3. Na enkele ogenblikpen, zodra de taak wordt uitgevoerd, bekijkt u op de pagina Overzicht van de streamingtaak de grafiek Bewaking . In de grafiek moeten enkele duizenden invoerevenementen en tientallen uitvoer-gebeurtenissen worden weergegeven.

De Azure Cosmos DB-uitvoergegevens controleren

  1. Zoek de resourcegroep met de TollApp-resources.

  2. Selecteer het Azure Cosmos DB-account met het naampatroon tollapp<random-cosmos>.

  3. Selecteer de kop Data Explorer om de Data Explorer pagina te openen.

  4. Vouw de tollAppDatabase>tollAppCollection-documenten> uit.

  5. In de lijst met id's worden verschillende documenten weergegeven zodra de uitvoer beschikbaar is.

  6. Selecteer elke id om het JSON-document te controleren. Let op elke tollid, windowend timeen de count of cars uit dat venster.

  7. Na drie extra minuten is er nog een set van vier documenten beschikbaar, één document per tollid.

Totale tijd voor elke auto rapporteren

De gemiddelde tijd die een auto nodig heeft om de tol te passeren, helpt bij het beoordelen van de efficiëntie van het proces en de klantervaring.

Als u de totale tijd wilt vinden, voegt u de EntryTime-stream toe aan de ExitTime-stream. Voeg de twee invoerstromen samen op de overeenkomende kolommen TollId en LicencePlate. Voor de JOIN-operator moet u tijdelijke speelruimte opgeven die het acceptabele tijdsverschil tussen de gekoppelde gebeurtenissen beschrijft. Gebruik de functie DATEDIFF om op te geven dat gebeurtenissen niet meer dan 15 minuten van elkaar verwijderd mogen zijn. Pas ook de functie DATEDIFF toe op de uitgangs- en inrijtijden om de werkelijke tijd te berekenen die een auto in het tolstation doorbrengt. Let op het verschil tussen het gebruik van DATEDIFF wanneer het wordt gebruikt in een SELECT-instructie in plaats van een JOIN-voorwaarde .

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

De querysyntaxis van de TollApp-streamingtaak bijwerken:

  1. Selecteer op de pagina Overzicht van de taak de optie Stoppen.

  2. Wacht even totdat de melding wordt weergegeven dat de taak is gestopt.

  3. Selecteer onder de kop TAAKTOPOLOGIE de optie <> Query

  4. Plak de aangepaste SQL-query voor streaming.

  5. Selecteer Opslaan om de query op te slaan. Bevestig Ja om de wijzigingen op te slaan.

  6. Selecteer Op de pagina Overzicht van de taak de optie Starten.

  7. Selecteer in het deelvenster Taak startende optie Nu.

De totale tijd in de uitvoer controleren

Herhaal de stappen in de vorige sectie om de Azure Cosmos DB-uitvoergegevens van de streamingtaak te controleren. Bekijk de meest recente JSON-documenten.

In dit document ziet u bijvoorbeeld een voorbeeld van een auto met een bepaald kenteken, de entrytime en exit time, en het berekende durationinminutes veld DATEDIFF met de duur van het tolhuisje als twee minuten:

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

Voertuigen met verlopen registratie rapporteren

Azure Stream Analytics kan statische momentopnamen van referentiegegevens gebruiken om samen te voegen met tijdelijke gegevensstromen. Gebruik de volgende voorbeeldvraag om deze mogelijkheid te demonstreren. De registratie-invoer is een statisch blob-JSON-bestand met de vervaldatums van licentietags. Door samen te voegen op het kenteken, worden de referentiegegevens vergeleken met elk voertuig dat de tol zowel passeert.

Als een bedrijfsvoertuig is geregistreerd bij het tolbedrijf, kan het door de tolpoort passeren zonder te worden gestopt voor inspectie. Gebruik de opzoektabel voor registraties om alle bedrijfsvoertuigen te identificeren die verlopen registraties hebben.

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. Herhaal de stappen in de vorige sectie om de querysyntaxis van de TollApp-streamingtaak bij te werken.

  2. Herhaal de stappen in de vorige sectie om de Azure Cosmos DB-uitvoergegevens van de streamingtaak te controleren.

Voorbeelduitvoer:

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

De taak uitschalen

Azure Stream Analytics is ontworpen om elastisch te schalen, zodat grote hoeveelheden gegevens kunnen worden verwerkt. De Azure Stream Analytics-query kan een PARTITION BY-component gebruiken om het systeem te vertellen dat deze stap wordt uitgeschaald. PartitionId is een speciale kolom die het systeem toevoegt om overeen te komen met de partitie-id van de invoer (Event Hub).

Als u de query wilt uitschalen naar partities, bewerkt u de querysyntaxis in de volgende code:

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

De streamingtaak omhoog schalen naar meer streaming-eenheden:

  1. De huidige taak stoppen.

  2. Werk de querysyntaxis bij op de <> pagina Query en sla de wijzigingen op.

  3. Selecteer Onder de kop CONFIGUREREN van de streamingtaak de optie Schalen.

  4. Schuif de schuifregelaar Streaming-eenheden van 1 naar 6. Streaming-eenheden definiëren de hoeveelheid rekenkracht die de taak kan ontvangen. Selecteer Opslaan.

  5. Start de streamingtaak om de extra schaal te demonstreren. Azure Stream Analytics distribueert werk over meer rekenresources en bereikt een betere doorvoer, waarbij het werk wordt gepartitioneerd over resources met behulp van de kolom die is opgegeven in de PARTITION BY-component.

De taak bewaken

Het gebied MONITOR bevat statistieken over de actieve taak. Er is een eerste configuratie nodig om het opslagaccount in dezelfde regio te gebruiken (naam is niet gratis zoals in de rest van dit document).

Azure Stream Analytics-taakbewaking

U kunt activiteitenlogboeken ook openen vanuit het gebied Instellingen van het taakdashboard.

De TollApp-resources opschonen

  1. Stop de Stream Analytics-taak in de Azure Portal.

  2. Zoek de resourcegroep met acht resources die betrekking hebben op de TollApp-sjabloon.

  3. Selecteer Resourcegroep verwijderen. Typ de naam van de resourcegroep om het verwijderen te bevestigen.

Conclusie

Met deze oplossing hebt u kennisgemaakt met de Azure Stream Analytics-service. Er is gedemonstreerd hoe u invoer en uitvoer configureert voor de Stream Analytics-taak. Met behulp van het scenario voor betaalde gegevens werd in de oplossing uitgelegd welke veelvoorkomende soorten problemen zich voordoen in de ruimte van gegevens in beweging en hoe deze kunnen worden opgelost met eenvoudige SQL-achtige query's in Azure Stream Analytics. In de oplossing werden SQL-extensieconstructies beschreven voor het werken met tijdelijke gegevens. Het liet zien hoe u gegevensstromen koppelt, hoe u de gegevensstroom kunt verrijken met statische referentiegegevens en hoe u een query kunt uitschalen om een hogere doorvoer te bereiken.

Hoewel deze oplossing een goede inleiding biedt, is deze op geen enkele manier voltooid. U vindt meer querypatronen met behulp van de SAQL-taal in Voorbeelden van query's voor algemene Stream Analytics-gebruikspatronen.