Elaborare flussi di dati IoT in tempo reale con Analisi di flusso di Azure
In questo articolo viene illustrato come creare la logica di elaborazione di flusso per raccogliere dati dai dispositivi IoT (Internet of Things). Si usa un caso d'uso di Internet of Things (IoT) reale per illustrare come creare la soluzione in modo rapido ed economico.
Prerequisiti
Scenario
Contoso, una società nello spazio di automazione industriale, ha automatizzato il processo di produzione. I macchinari dello stabilimento hanno sensori in grado di emettere flussi di dati in tempo reale. In questo scenario, un responsabile del reparto produzione vuole avere informazioni in tempo reale dai dati del sensore per individuare modelli ricorrenti e intraprendere azioni correttive. È possibile usare Stream Analytics Query Language (SAQL) sui dati del sensore per trovare modelli interessanti dal flusso di dati in ingresso.
In questo esempio i dati vengono generati da un dispositivo di tag del sensore Texas Instruments. Il payload dei dati è in formato JSON, come illustrato nel frammento di esempio seguente:
{
"time": "2016-01-26T20:47:53.0000000",
"dspl": "sensorE",
"temp": 123,
"hmdt": 34
}
In uno scenario reale possono essere presenti centinaia di questi sensori che generano eventi come un flusso. Idealmente, un dispositivo gateway dovrebbe eseguire codice per effettuare il push degli eventi a hub eventi di Azure o hub IoT di Azure. Il processo di Analisi di flusso inserisce questi eventi da hub eventi o hub IoT ed esegue query di analisi in tempo reale sui flussi. È quindi possibile inviare i risultati a uno degli output supportati.
Per semplicità d'uso, questa guida introduttiva include un file di dati di esempio acquisito da dispositivi SensorTag reali. È possibile eseguire query sui dati di esempio e visualizzare i risultati. Nelle esercitazioni successive si apprenderà come connettere il processo agli input e agli output e distribuirli nel servizio di Azure.
Creare un processo di Analisi di flusso.
Passare al portale di Azure.
Nel menu di spostamento a sinistra selezionare Tutti i servizi, selezionare Analisi, passare il mouse sui processi di Analisi di flusso e quindi selezionare Crea.
Nella pagina Nuovo processo di Analisi di flusso seguire questa procedura:
Per Sottoscrizione selezionare la sottoscrizione di Azure.
Per Gruppo di risorse selezionare un gruppo di risorse esistente o creare un gruppo di risorse.
Per Nome immettere un nome univoco per il processo di Analisi di flusso.
Selezionare l'area in cui si vuole distribuire il processo di Analisi di flusso. Usare la stessa posizione per il gruppo di risorse e tutte le risorse per aumentare la velocità di elaborazione e ridurre i costi.
Selezionare Rivedi e crea.
Nella pagina Rivedi e crea , rivedere le impostazioni e selezionare Crea.
Al termine della distribuzione, selezionare Vai alla risorsa per passare alla pagina processo di Analisi di flusso per il processo di Analisi di flusso.
Creare una query di analisi di flusso di Azure
Dopo aver creato il processo, scrivere una query. È possibile testare le query sui dati di esempio senza connettere un input o un output al processo.
Scaricare HelloWorldASA-InputStream.json da GitHub.
Nella pagina processo di Analisi di flusso di Azure nella portale di Azure selezionare Query in Topologia processo dal menu a sinistra.
Selezionare Carica input di esempio, selezionare il
HelloWorldASA-InputStream.json
file scaricato e selezionare OK.Si noti che un'anteprima dei dati viene popolata automaticamente nella tabella di anteprima input .
Query: Archiviazione dei dati non elaborati
La forma più semplice di query è una query pass-through che archivia tutti i dati di input nell'output designato. Questa query è la query predefinita popolata in un nuovo processo di Analisi di flusso di Azure.
Nella finestra Query immettere la query seguente e quindi selezionare Test query sulla barra degli strumenti.
SELECT * INTO youroutputalias FROM yourinputalias
Visualizzare i risultati nella scheda Risultati test nel riquadro inferiore.
Query: Filtro dei dati in base a una condizione
Aggiornare la query per filtrare i risultati in base a una condizione. Ad esempio, la query seguente mostra gli eventi provenienti da sensorA
."
Aggiornare la query con l'esempio seguente:
SELECT time, dspl AS SensorName, temp AS Temperature, hmdt AS Humidity INTO youroutputalias FROM yourinputalias WHERE dspl='sensorA'
Selezionare Query di test per visualizzare i risultati della query.
Query: Avviso per attivare un flusso di lavoro aziendale
La query verrà ora resa più dettagliata. Per ogni tipo di sensore, si vuole monitorare la temperatura media in una finestra di 30 secondi e visualizzare i risultati solo se tale temperatura supera i 100 gradi.
Aggiornare la query a:
SELECT System.Timestamp AS OutputTime, dspl AS SensorName, Avg(temp) AS AvgTemperature INTO youroutputalias FROM yourinputalias TIMESTAMP BY time GROUP BY TumblingWindow(second,30),dspl HAVING Avg(temp)>100
Selezionare Query di test per visualizzare i risultati della query.
Verranno visualizzati i risultati che contengono solo 245 righe e nomi di sensori in cui la media temperata è maggiore di 100. La query raggruppa il flusso di eventi in base al nome del sensore (dspl) su una finestra a cascata di 30 secondi. Le query temporali devono specificare la modalità di avanzamento del tempo. Usando la clausola TIMESTAMP BY , è stata specificata la colonna OUTPUTTIME per associare i tempi a tutti i calcoli temporali. Per informazioni dettagliate, leggere le funzioni gestione tempo e finestra.
Query: rilevare l'assenza di eventi
La scrittura di una query per trovare una mancanza di eventi di input È possibile trovare l'ultima volta che un sensore ha inviato dati e quindi non ha inviato eventi per i successivi 5 secondi.
Aggiornare la query a:
SELECT t1.time, t1.dspl AS SensorName INTO youroutputalias FROM yourinputalias t1 TIMESTAMP BY time LEFT OUTER JOIN yourinputalias t2 TIMESTAMP BY time ON t1.dspl=t2.dspl AND DATEDIFF(second,t1,t2) BETWEEN 1 and 5 WHERE t2.dspl IS NULL
Selezionare Query di test per visualizzare i risultati della query.
In questo caso viene usato un LEFT OUTER JOIN per lo stesso flusso di dati (self-join). In caso di INNER JOIN viene restituito un risultato solo quando viene trovata una corrispondenza. In caso di LEFT OUTER JOIN, se un evento del lato sinistro del join è senza corrispondenza viene restituita una riga con valore NULL per tutte le colonne del lato destro. Questa tecnica è utile per trovare un'assenza di eventi. Per altre informazioni, vedere JOIN.
Conclusione
Lo scopo di questo articolo è illustrare come scrivere query di query di Analisi di flusso diverse e vedere i risultati nel browser. Tuttavia, questo articolo è solo per iniziare. Analisi di flusso supporta vari input e output e può anche usare funzioni in Azure Machine Learning per renderlo uno strumento affidabile per l'analisi dei flussi di dati. Per altre informazioni su come scrivere le query, vedere l'articolo sui modelli di query comuni.