Compilare una soluzione IoT con Analisi di flusso
Introduzione
In questa soluzione viene descritto come usare Analisi di flusso di Azure per ottenere informazioni approfondite in tempo reale dai dati. Gli sviluppatori possono combinare facilmente flussi di dati, come clickstream, log ed eventi generati da dispositivi, con record cronologici o dati di riferimento per ottenere informazioni aziendali approfondite. Analisi di flusso di Azure è un servizio di calcolo dei flussi in tempo reale completamente gestito, ospitato in Microsoft Azure, con caratteristiche di resilienza predefinita, bassa latenza e scalabilità che consentono la piena operatività in pochi minuti.
Dopo aver completato questa soluzione, è possibile:
- Acquisire familiarità con il portale di Analisi di flusso di Azure.
- Configurare e distribuire un processo di flusso.
- Articolare problemi reali e risolverli con il linguaggio di query di Analisi di flusso.
- Sviluppare in tutta sicurezza soluzioni di streaming per i clienti usando Analisi di flusso.
- Usare l'esperienza di monitoraggio e registrazione per risolvere i problemi.
Prerequisiti
Per completare questa soluzione, è necessario soddisfare i prerequisiti seguenti:
Presentazione dello scenario: il casello
Un casello rappresenta una situazione piuttosto comune. Se ne incontrano sulle autostrade e su molti ponti e tunnel in tutto il mondo. Ogni barriera è costituita da più caselli. In quelli manuali ci si ferma per pagare il pedaggio a un addetto. In quelli automatizzati al passaggio attraverso il casello un sensore posto al di sopra di esso analizza una scheda RFID posizionata sul parabrezza del veicolo. È facile visualizzare il passaggio dei veicoli attraverso queste stazioni di pedaggio come flusso di eventi su cui è possibile eseguire operazioni interessanti.
Dati di ingresso
Questa soluzione usa due flussi di dati. Il primo flusso viene prodotto da sensori installati all'entrata e all'uscita del casello. Il secondo flusso è un set di dati di ricerca statico contenente dati di registrazione dei veicoli.
Flusso di dati di ingresso
Il flusso di dati di ingresso contiene informazioni sulle automobili che entrano nel casello. Gli eventi di dati di uscita vengono trasmessi in diretta in un hub eventi da un'app Web inclusa nell'app di esempio.
| 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 |
Ecco una breve descrizione delle colonne:
Colonna | Descrizione |
---|---|
ID casello | ID casello che identifica in modo univoco un casello |
Tempo ingresso | Data e ora (UTC) di ingresso del veicolo nel casello |
Targa | Numero di targa del veicolo |
State | Stato degli Stati Uniti |
Casa automobilistica | Il produttore dell'automobile |
Modellare | Numero di modello dell'automobile |
Tipo veicolo | 1 per autovetture o 2 per veicoli commerciali |
Peso veicolo | Peso del veicolo in tonnellate, 0 per veicoli passeggeri |
Casello | Il valore del pedaggio in USD |
Tag | e-Tag sull'automobile che permette di automatizzare il pagamento, lasciato vuoto quando il pagamento viene effettuato manualmente |
Flusso di dati di uscita
Il flusso di dati di uscita contiene informazioni sulle automobili che escono dal casello. Gli eventi di dati di uscita vengono trasmessi in diretta in un hub eventi da un'app Web inclusa nell'app di esempio.
TollId | Tempo ingresso | Targa |
---|---|---|
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 |
Ecco una breve descrizione delle colonne:
Colonna | Descrizione |
---|---|
ID casello | ID casello che identifica in modo univoco un casello |
Tempo ingresso | Data e ora (UTC) di uscita del veicolo dal casello |
Targa | Numero di targa del veicolo |
Dati di registrazione di veicoli commerciali
Questa soluzione usa uno snapshot statico di un database di registrazione di veicoli commerciali. I dati vengono salvati come file JSON nell'archiviazione BLOB di Azure e sono inclusi nell'esempio.
Targa | ID registrazione | Scaduto |
---|---|---|
SVT 6023 | 285429838 | 1 |
XLZ 3463 | 362715656 | 0 |
BAC 1005 | 876133137 | 1 |
RIV 8632 | 992711956 | 0 |
SNY 7188 | 592133890 | 0 |
ELH 9896 | 678427724 | 1 |
Ecco una breve descrizione delle colonne:
Colonna | Descrizione |
---|---|
Targa | Numero di targa del veicolo |
ID registrazione | ID registrazione del veicolo |
Scaduto | Stato di registrazione del veicolo: 0 se la registrazione del veicolo è attiva, 1 se la registrazione è scaduta |
Configurare l'ambiente per Analisi di flusso di Azure
Per completare la soluzione, è necessaria una sottoscrizione di Microsoft Azure. Se non si ha un account Azure, è possibile richiedere una versione di valutazione gratuita.
Per poter usare al meglio il credito Azure gratuito, seguire la procedura riportata nella sezione "Eseguire la pulizia dell'account Azure" alla fine di questo articolo.
Distribuire l'esempio
Diverse risorse possono essere facilmente distribuite in un gruppo di risorse in pochi clic. La definizione della soluzione è ospitata nel repository GitHub all'indirizzo https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.
Distribuire il modello TollApp nel portale di Azure
Per distribuire l'ambiente TollApp in Azure, usare questo collegamento per distribuire il modello TollApp di Azure.
Se richiesto, accedere al portale di Azure.
Scegliere la sottoscrizione usata per la fatturazione delle diverse risorse.
Specificare un nuovo gruppo di risorse con un nome univoco, ad esempio
MyTollBooth
.Selezionare una località di Azure.
Specificare un valore come numero di secondi in Intervallo. Questo valore viene usato nell'app Web di esempio per la frequenza con cui inviare dati in un hub eventi.
Fare clic su Seleziona per accettare i termini e le condizioni.
Selezionare Aggiungi al dashboard in modo da poter individuare facilmente le risorse in seguito.
Selezionare Acquista per distribuire il modello di esempio.
Dopo alcuni istanti, viene visualizzata la notifica La distribuzione è riuscita, che conferma l'operazione.
Esaminare le risorse di Analisi di flusso di Azure per TollApp
Accedere al portale di Azure.
Individuare il gruppo di risorse denominato nella sezione precedente.
Verificare che le risorse seguenti siano elencate nel gruppo di risorse:
- Un account Azure Cosmos DB
- Un processo di Analisi di flusso di Azure
- Un account di archiviazione di Azure
- Un hub eventi di Azure
- Due app Web
Esaminare il processo TollApp di esempio
A partire dal gruppo di risorse nella sezione precedente, selezionare il processo di streaming di Analisi di flusso a partire dal nome (il nome
tollapp
contiene caratteri casuali per l'univocità).Nella pagina Panoramica del processo notare la casella Query, in cui è visualizzata la sintassi di query.
SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*) AS Count INTO CosmosDB FROM EntryStream TIMESTAMP BY EntryTime GROUP BY TUMBLINGWINDOW(minute, 3), TollId
Parafrasando la finalità della query, è necessario conteggiare il numero di veicoli che entrano in un casello. Poiché un casello in autostrada ha un flusso continuo di veicoli in entrata, questi eventi di entrata sono analoghi a un flusso senza fine. Per quantificare il flusso, è necessario definire un "periodo di tempo" in base al quale eseguire la misurazione. Affinare ulteriormente la domanda: "Quanti veicoli entrano in un casello ogni tre minuti?" Questa operazione viene comunemente definita conteggio a cascata.
Come si può notare, Analisi di flusso di Azure usa un linguaggio di query simile a SQL e aggiunge alcune estensioni per specificare gli aspetti temporali della query. Per maggiori dettagli, vedere i costrutti relativi alla gestione del tempo e al windowing usati nella query.
Esaminare gli input del processo di esempio TollApp. Nella query corrente viene usato solo l'input EntryStream.
- L'input EntryStream è una connessione dell'hub eventi che accoda i dati che rappresentano ogni volta che un'auto entra in un casello sull'autostrada. Un'app Web che fa parte dell'esempio crea gli eventi e i dati vengono accodati in questo hub eventi. Notare che le query su questo input vengono eseguite nella clausola FROM della query di streaming.
- L'input ExitStream è una connessione dell'hub eventi che accoda i dati che rappresentano ogni volta che un'auto esce da un casello sull'autostrada. Questo input di streaming viene usato in variazioni successive della sintassi di query.
- L'input Registration è una connessione all'archiviazione BLOB di Azure che punta a un file JSON di registrazione statico, usato per le ricerche in base alle necessità. Questo input di dati di riferimento viene usato in variazioni successive della sintassi di query.
Esaminare gli output del processo di esempio TollApp.
- L'output di Azure Cosmos DB è un contenitore di database Azure Cosmos DB che riceve gli eventi sink di output. Notare che questo output viene usato nella clausola INTO della query di streaming.
Avviare il processo di streaming TollApp
Per avviare il processo di streaming, completare questi passaggi:
Nella pagina Panoramica del processo selezionare Avvia.
Nel riquadro Avvia processo selezionare Ora.
Dopo alcuni istanti, quando il processo è in esecuzione, nella pagina Panoramica del processo di streaming visualizzare il grafico Monitoraggio. Il grafico mostrerà diverse migliaia di eventi in input e decine di eventi di output.
Esaminare i dati di output di Azure Cosmos DB
Individuare il gruppo di risorse che contiene le risorse di TollApp.
Selezionare l'account Azure Cosmos DB con il modello di denominazione tollapp<random>-cosmos.
Selezionare l'intestazione Esplora dati per aprire la pagina Esplora dati.
Espandere idocumentitollAppDatabase>tollAppCollection>.
Nell'elenco degli ID vengono visualizzati diversi documenti quando l'output è disponibile.
Selezionare ogni ID per esaminare il documento JSON. Si notino ogni
tollid
oggetto ,windowend time
e dacount of cars
tale finestra.Dopo altri tre minuti, è disponibile un altro set di quattro documenti, un documento per
tollid
.
Segnalare il tempo totale per ogni auto
Il tempo medio necessario a un'automobile per passare attraverso il casello consente di valutare l'efficienza del processo e l'esperienza dell'utente.
Per trovare il tempo totale, unire il flusso EntryTime al flusso ExitTime. Unire i due flussi di input nelle colonne TollId e LicencePlate corrispondenti. L'operatore JOIN richiede di specificare un margine temporale che descrive la differenza di tempo accettabile tra gli eventi uniti. Usare la funzione DATEDIFF per specificare che gli eventi non devono essere distanti più di 15 minuti uno dall'altro. Applicare anche la funzione DATEDIFF ai tempi di uscita ed entrata per calcolare il tempo effettivo impiegato da un'auto nel casello. Si noti il diverso uso di DATEDIFF in un'istruzione SELECT rispetto a una condizione JOIN.
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
Per aggiornare la sintassi di query del processo di streaming TollApp:
Nella pagina Panoramica del processo selezionare Arresta.
Attendere alcuni istanti la notifica di arresto del processo.
Nell'intestazione TOPOLOGIA PROCESSO selezionare <> Query
Incollare la query SQL di streaming modificata.
Selezionare Salva per salvare la query. Confermare Sì per salvare le modifiche.
Nella pagina Panoramica del processo selezionare Avvia.
Nel riquadro Avvia processo selezionare Ora.
Esaminare il tempo totale nell'output
Ripetere i passaggi della sezione precedente per esaminare i dati di output di Azure Cosmos DB dal processo di streaming. Esaminare i documenti JSON più recenti.
Ad esempio, questo documento mostra un'automobile di esempio con una determinata targa, e entrytime
exit time
e il campo calcolato durationinminutes
DATEDIFF che mostra la durata del casello come due minuti:
{
"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
}
Segnalare i veicoli con registrazione scaduta
Analisi di flusso di Azure può usare snapshot statici dei dati di riferimento da unire ai flussi di dati temporali. Per illustrare questa funzionalità, usare la domanda di esempio seguente. L'input Registration è un file JSON BLOB statico che elenca le scadenze delle targhe. Unendo la targa, i dati di riferimento vengono confrontati con ogni veicolo che attraversa il casello.
Se un veicolo commerciale è registrato presso l'azienda che gestisce il casello, lo può attraversare senza essere fermato per un controllo. Usare la tabella di ricerca relativa alla registrazione per identificare tutti i veicoli commerciali la cui registrazione è scaduta.
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'
Ripetere i passaggi indicati nella sezione precedente per aggiornare la sintassi di query del processo di streaming TollApp.
Ripetere i passaggi della sezione precedente per esaminare i dati di output di Azure Cosmos DB dal processo di streaming.
Output di esempio:
{
"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
}
Scalare orizzontalmente il processo
Analisi di flusso di Azure è progettato per offrire scalabilità elastica in modo da gestire volumi elevati di dati. La query di Analisi di flusso di Azure può usare una clausola PARTITION BY per indicare al sistema che questo passaggio aumenta il numero di istanze. PartitionId è una colonna speciale aggiunta dal sistema in modo che corrisponda all'ID di partizione dell'input (hub eventi).
Per scalare orizzontalmente la query nelle partizioni, modificare la sintassi di query in base al codice seguente:
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
Per ridimensionare il processo di streaming in base a più unità di streaming:
Fare clic su Arresta per arrestare il processo corrente.
Aggiornare la sintassi di query nella <> pagina Query e salvare le modifiche.
Nell'intestazione CONFIGURA nel processo di streaming selezionare Scala.
Spostare il dispositivo di scorrimento Unità di streaming da 1 a 6. Le unità di streaming definiscono la quantità di potenza di calcolo che il processo può ricevere. Selezionare Salva.
Fare clic su Avvia per avviare il processo di streaming per provare la scalabilità aggiuntiva. Analisi di flusso di Azure distribuisce il lavoro tra più risorse di calcolo e ottiene una velocità effettiva migliore, partizionando il lavoro tra le risorse usando la colonna designata nella clausola PARTITION BY.
Monitorare il processo
L'area MONITORAGGIO contiene le statistiche relative al processo in esecuzione. La configurazione iniziale è necessaria per usare l'account di archiviazione nella stessa area (denominare il casello come nelle altre parti di questo documento).
È possibile accedere a Log attività anche dall'area Impostazioni del dashboard del processo.
Pulire le risorse di TollApp
Arrestare il processo di Analisi di flusso nel portale di Azure.
Individuare il gruppo di risorse che contiene otto risorse correlate al modello TollApp.
Selezionare Elimina gruppo di risorse. Digitare il nome del gruppo di attività per confermare l'eliminazione.
Conclusione
Questa soluzione ha presentato il servizio Analisi di flusso di Azure. È stato illustrato come configurare input e output per il processo di Analisi di flusso. Usando lo scenario Toll Data, la soluzione ha illustrato i tipi comuni di problemi che si verificano nello spazio dei dati in movimento e come possono essere risolti con semplici query simili a SQL in Analisi di flusso di Azure. La soluzione ha descritto i costrutti di estensioni SQL per l'uso di dati temporali. È stato illustrato come creare un join tra flussi di dati, come arricchire il flusso di dati con dati di riferimento statici e come aumentare il numero di istanze di una query per ottenere una maggiore produttività.
Anche se questa soluzione offre una buona introduzione, non è completa da nessuna parte. Per altri modelli di query che usano il linguaggio SAQL, vedere Esempi di query per modelli di uso comune di Analisi di flusso.