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

  • Creare una sottoscrizione gratuita di Azure.
  • Scaricare query di esempio e file di dati da GitHub.

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.

  1. Passare al portale di Azure.

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

    Screenshot che mostra la selezione del pulsante Crea per un processo di Analisi di flusso.

  3. Nella pagina Nuovo processo di Analisi di flusso seguire questa procedura:

    1. Per Sottoscrizione selezionare la sottoscrizione di Azure.

    2. Per Gruppo di risorse selezionare un gruppo di risorse esistente o creare un gruppo di risorse.

    3. Per Nome immettere un nome univoco per il processo di Analisi di flusso.

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

    5. Selezionare Rivedi e crea.

      Screenshot che mostra la pagina Nuovo processo di Analisi di flusso.

  4. Nella pagina Rivedi e crea , rivedere le impostazioni e selezionare Crea.

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

  1. Scaricare HelloWorldASA-InputStream.json da GitHub.

  2. Nella pagina processo di Analisi di flusso di Azure nella portale di Azure selezionare Query in Topologia processo dal menu a sinistra.

  3. Selezionare Carica input di esempio, selezionare il HelloWorldASA-InputStream.json file scaricato e selezionare OK.

    Screenshot che mostra la pagina **Query** con **Carica input di esempio** selezionata.

  4. Si noti che un'anteprima dei dati viene popolata automaticamente nella tabella di anteprima input .

    Screenshot che mostra i dati di input di esempio nella scheda 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.

  1. Nella finestra Query immettere la query seguente e quindi selezionare Test query sulla barra degli strumenti.

    SELECT
        *
    INTO
        youroutputalias
    FROM
        yourinputalias
    
  2. Visualizzare i risultati nella scheda Risultati test nel riquadro inferiore.

    Screenshot che mostra la query di esempio e i relativi risultati.

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

  1. 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'
    
  2. Selezionare Query di test per visualizzare i risultati della query.

    Screenshot che mostra i risultati della query con il filtro.

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.

  1. 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
    
  2. Selezionare Query di test per visualizzare i risultati della query.

    Screenshot che mostra la query con una finestra di tumbling.

    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.

  1. 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
    
  2. Selezionare Query di test per visualizzare i risultati della query.

    Screenshot che mostra la query che rileva l'assenza di eventi.

    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.