Delen via


Een IoT-oplossing bouwen met behulp van Stream Analytics

Inleiding

In deze oplossing leert u hoe u Azure Stream Analytics gebruikt om realtime inzicht te krijgen in uw gegevens. Ontwikkelaars kunnen eenvoudig stromen met gegevens combineren, zoals klikstreams, logboeken en door het apparaat gegenereerde gebeurtenissen, met historische records of referentiegegevens om zakelijke inzichten af te leiden. Als 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:

  • Raak vertrouwd met de Azure Stream Analytics-portal.
  • Een streamingtaak configureren en implementeren.
  • Formuleer echte problemen en los ze op met behulp van de Stream Analytics-querytaal.
  • Ontwikkel streaming-oplossingen voor uw klanten met behulp van Stream Analytics met vertrouwen.
  • 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 gangbaar fenomeen. Je ontmoet ze op veel expressways, bruggen en tunnels over de hele wereld. Elk tolstation heeft meerdere tolhokjes. Bij handmatige standen stopt u met het betalen van de tol aan een attendant. Bij geautomatiseerde standen scant een sensor boven op elke stand een RFID-kaart die op de windscherm van uw voertuig wordt aangebracht terwijl u de tolcel passeert. Het is eenvoudig om de passage van voertuigen door deze tolstations te visualiseren als een gebeurtenisstroom waar interessante bewerkingen kunnen worden uitgevoerd.

Foto van auto's bij tolhokjes

Binnenkomende gegevens

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

Gegevensstroom invoeren

De invoergegevensstroom bevat informatie over auto's tijdens het invoeren van tolstations. 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
Tol-id De tolcel-id die een tolhokje uniek identificeert
EntryTime De datum en tijd van de invoer van het voertuig in de tolcel in UTC
LicensePlate Het nummer van het kenteken van het voertuig
Provincie Een status in Verenigde Staten
Maken De fabrikant van de auto
Modelleren Het modelnummer van de auto
VehicleType Ofwel 1 voor passagiersvoertuigen of 2 voor bedrijfsvoertuigen
WeightType Voertuiggewicht in ton; 0 voor passagiersvoertuigen
Toll 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 afsluitgegevensstroom 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 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.0000000Z BNJ 1007
2 2014-09-10T12:07:00.0000000Z CDE 1007

Hier volgt een korte beschrijving van de kolommen:

Kolom Beschrijving
Tol-id De tolcel-id die een tolhokje uniek identificeert
ExitTime De datum en tijd van uitgang van het voertuig vanaf tolcel in UTC
LicensePlate Het nummer van het kenteken van het voertuig

Registratiegegevens voor bedrijfsauto's

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

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

Hier volgt een korte beschrijving van de kolommen:

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

De omgeving instellen voor Azure Stream Analytics

U hebt een Microsoft Azure-abonnement nodig om deze oplossing te voltooien. 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 kunnen worden geïmplementeerd in een resourcegroep, samen met een paar klikken. 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 Azure Portal

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

  2. Meld u aan bij 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 voorbeeldweb-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 eenvoudig kunt vinden.

  9. Selecteer Kopen om de voorbeeldsjabloon te implementeren.

  10. Na enkele ogenblikken wordt er een melding weergegeven om te bevestigen dat de implementatie is geslaagd.

De Azure Stream Analytics TollApp-resources controleren

  1. Meld u aan bij het Azure-portaal.

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

  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. Selecteer vanaf de resourcegroep in de vorige sectie de Stream Analytics-streamingtaak die begint met de naam tollapp (naam bevat willekeurige tekens voor uniekheid).

  2. Let op de pagina Overzicht van de taak op het vak Query om de syntaxis van de query 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
    

    Als u de intentie van de query wilt parafraseren, moet u het aantal voertuigen tellen dat een tolcel binnenkomt. Omdat een tolhokje langs de snelweg 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 'periode' definiëren om te meten. Laten we de vraag verder verfijnen: "Hoeveel voertuigen komen om de drie minuten in een tolhokje?" Dit wordt meestal het tumblingaantal genoemd.

    Zoals u kunt zien, maakt Azure Stream Analytics gebruik van een querytaal die vergelijkbaar is met SQL en voegt u enkele extensies toe om tijdgerelateerde aspecten van de query op te geven. Lees voor meer informatie over tijdbeheer - en vensterconstructies die in de query worden gebruikt.

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

    • EntryStream-invoer is een Event Hub-verbinding die gegevens in de wachtrij houdt die elke keer dat een auto een tolbooth op de snelweg binnenkomt. 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 die gegevens in de wachtrij houdt die elke keer dat een auto een tolbooth 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 streamingtaak TollApp starten

Volg deze stappen om de streamingtaak te starten:

  1. Selecteer Start op de pagina Overzicht van de taak.

  2. Selecteer Nu in het deelvenster Taak starten.

  3. Wanneer de taak na enkele ogenblikpen wordt uitgevoerd, bekijkt u de bewakingsgrafiek op de pagina Overzicht van de streamingtaak. In de grafiek moeten enkele duizenden invoerevenementen en tientallen uitvoerevenementen worden weergegeven.

De uitvoergegevens van Azure Cosmos DB controleren

  1. Zoek de resourcegroep die de TollApp-resources bevat.

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

  3. Selecteer de Data Explorer-kop 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 elk tollid, windowend timeen het count of cars uit dat venster.

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

Totale tijd rapporteren voor elke auto

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

Als u de totale tijd wilt vinden, voegt u de EntryTime-stream toe met de ExitTime-stream. Koppel de twee invoerstromen aan de overeenkomende kolommen TollId en LicensePlate. De JOIN-operator vereist dat u tijdelijke ruimte opgeeft waarin het acceptabele tijdsverschil tussen de gekoppelde gebeurtenissen wordt beschreven. Gebruik de functie DATEDIFF om op te geven dat gebeurtenissen niet meer dan 15 minuten van elkaar moeten zijn. Pas ook de functie DATEDIFF toe om de uitgangs- en ingangstijden te berekenen om de werkelijke tijd te berekenen die een auto in het tolstation doorbrengt. Let op het verschil van het gebruik van DATEDIFF wanneer deze 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 Stoppen op de pagina Overzicht van de taak.

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

  3. Selecteer Query onder <> de kop TAAKTOPOLOGIE

  4. Plak de aangepaste STREAMING SQL-query.

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

  6. Selecteer Start op de pagina Overzicht van de taak.

  7. Selecteer Nu in het deelvenster Taak starten.

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, het entrytime en exit time, en het berekende durationinminutes veld DATEDIFF met de duur van de tolcel 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
}

Rapportvoertuigen met verlopen registratie

Azure Stream Analytics kan statische momentopnamen van referentiegegevens gebruiken om deel te nemen aan 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 op de kentekenplaat te voegen, worden de referentiegegevens vergeleken met elk voertuig dat via het tolgeld passeert.

Als een bedrijfsvoertuig is geregistreerd bij het tolbedrijf, kan het door de tolhokje gaan zonder te worden gestopt voor inspectie. Gebruik de opzoektabel voor registratie 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 laten weten dat deze stap wordt uitgeschaald. PartitionId is een speciale kolom die het systeem toevoegt aan 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. Stop de huidige taak.

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

  3. Selecteer Schalen onder de kop CONFIGURE in de streamingtaak.

  4. Schuif de schuifregelaar Voor streaming-eenheden van 1 tot en met 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 realiseert een betere doorvoer, waarbij het werk over resources wordt gepartitioneerd met behulp van de kolom die is aangewezen in de PARTITION BY-component.

De taak bewaken

Het gebied MONITOR bevat statistieken over de actieve taak. De eerste configuratie is nodig om het opslagaccount in dezelfde regio te gebruiken (naam betaald als de rest van dit document).

Bewaking van Azure Stream Analytics-taken

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

De TollApp-resources opschonen

  1. Stop de Stream Analytics-taak in 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 Tolgegevens heeft de oplossing veelvoorkomende typen problemen uitgelegd die zich voordoen in de ruimte van gegevens die in beweging zijn en hoe ze kunnen worden opgelost met eenvoudige SQL-achtige query's in Azure Stream Analytics. De oplossing die wordt beschreven in SQL-extensieconstructies voor het werken met tijdelijke gegevens. Het liet zien hoe u gegevensstromen kunt samenvoegen, 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 compleet. U vindt meer querypatronen met behulp van de SAQL-taal in Queryvoorbeelden voor algemene Gebruikspatronen van Stream Analytics.