Processar fluxos de dados IoT em tempo real com o Azure Stream Analytics

Neste artigo, vai aprender a criar lógica de processamento de fluxos para recolher dados de dispositivos IoT (Internet das Coisas). Utiliza um caso de utilização da Internet das Coisas (IoT) no mundo real para demonstrar como criar a sua solução de forma rápida e económica.

Pré-requisitos

Scenario

A Contoso, empresa no espaço de automatização industrial, automatizou o processo de fabrico. Nesta fábrica, as máquinas têm sensores que emitem transmissões de dados em tempo real. Neste cenário, um gestor do piso de produção pretende ter conhecimentos aprofundados e em tempo real sobre os sensores de dados e tomar medidas relativamente aos mesmos. Pode utilizar a Linguagem de Consulta do Stream Analytics (SAQL) através dos dados do sensor para encontrar padrões interessantes a partir do fluxo de dados recebidos.

Neste exemplo, os dados são gerados a partir de um dispositivo de etiqueta de sensor Texas Instruments. O payload dos dados está no formato JSON, conforme mostrado no fragmento de exemplo seguinte:

{
    "time": "2016-01-26T20:47:53.0000000",  
    "dspl": "sensorE",  
    "temp": 123,  
    "hmdt": 34  
}  

Num cenário real, pode ter centenas destes sensores a gerar eventos como uma transmissão. O ideal seria ter um dispositivo de gateway a executar código para enviar estes eventos para os Hubs de Eventos do Azure ou Hubs IoT do Azure. A tarefa do Stream Analytics ingere estes eventos a partir dos Hubs de Eventos ou dos Hubs IoT e executa consultas de análise em tempo real nos fluxos. Em seguida, pode enviar os resultados para uma das saídas suportadas.

Para facilitar a utilização, este guia de introdução fornece um ficheiro de dados de exemplo, que foi capturado a partir de dispositivos Sensor Tag reais. Pode executar consultas nos dados de exemplo e ver os resultados. Nos tutoriais subsequentes, irá aprender a ligar a sua tarefa a entradas e saídas e a implementá-las no serviço do Azure.

Criar uma tarefa do Stream Analytics

  1. Navegue para o portal do Azure.

  2. No menu de navegação esquerdo, selecione Todos os serviços, selecione Análise, paire o rato sobre as tarefas do Stream Analytics e, em seguida, selecione Criar.

    Captura de ecrã que mostra a seleção do botão Criar para uma tarefa do Stream Analytics.

  3. Na página Nova tarefa do Stream Analytics , siga estes passos:

    1. Para Subscrição, selecione a sua subscrição do Azure.

    2. Para Grupo de recursos, selecione um grupo de recursos existente ou crie um grupo de recursos.

    3. Em Nome, introduza um nome exclusivo para a tarefa do Stream Analytics.

    4. Selecione a Região na qual pretende implementar a tarefa do Stream Analytics. Utilize a mesma localização para o grupo de recursos e todos os recursos para aumentar a velocidade de processamento e reduzir os custos.

    5. Selecione Rever + criar.

      Captura de ecrã a mostrar a página nova tarefa do Stream Analytics.

  4. Na página Rever + criar , reveja as definições e selecione Criar.

  5. Depois de a implementação ser concluída com êxito, selecione Ir para recurso para navegar para a página de tarefas do Stream Analytics para a sua tarefa do Stream Analytics.

Criar uma consulta do Azure Stream Analytics

Depois de criar a tarefa, escreva uma consulta. Pode testar consultas em dados de exemplo sem ligar uma entrada ou saída à sua tarefa.

  1. Transfira o HelloWorldASA-InputStream.json a partir do GitHub.

  2. Na página de tarefas do Azure Stream Analytics no portal do Azure, selecione Consulta em Topologia de tarefas no menu esquerdo.

  3. Selecione Carregar entrada de exemplo, selecione o HelloWorldASA-InputStream.json ficheiro que transferiu e selecione OK.

    Captura de ecrã que mostra a página **Consulta** com **Carregar entrada de exemplo** selecionada.

  4. Repare que uma pré-visualização dos dados é preenchida automaticamente na tabela De pré-visualização de entrada .

    Captura de ecrã que mostra dados de entrada de exemplo no separador Pré-visualização de entrada.

Consulta: Arquivar os dados não processados

A forma mais simples de consulta é uma consulta pass-through que arquiva todos os dados de entrada no resultado designado. Esta consulta é a consulta predefinida preenchida numa nova tarefa do Azure Stream Analytics.

  1. Na janela Consulta , introduza a seguinte consulta e, em seguida, selecione Testar consulta na barra de ferramentas.

    SELECT
        *
    INTO
        youroutputalias
    FROM
        yourinputalias
    
  2. Veja os resultados no separador Resultados do teste no painel inferior.

    Captura de ecrã que mostra a consulta de exemplo e os respetivos resultados.

Consulta: Filtrar os dados com base numa condição

Vamos atualizar a consulta para filtrar os resultados com base numa condição. Por exemplo, a seguinte consulta mostra os eventos provenientes de sensorA."

  1. Atualize a consulta com o seguinte exemplo:

    SELECT 
        time,
        dspl AS SensorName,
        temp AS Temperature,
        hmdt AS Humidity
    INTO
       youroutputalias
    FROM
        yourinputalias
    WHERE dspl='sensorA'
    
  2. Selecione Testar consulta para ver os resultados da consulta.

    Captura de ecrã que mostra os resultados da consulta com o filtro.

Consulta: Alerta para acionar um fluxo de trabalho comercial

Vamos tornar a nossa consulta mais detalhada. Para cada tipo de sensor, queremos monitorizar a temperatura média por cada janela de 30 segundos e apresentar os resultados apenas se a temperatura média for superior a 100 graus.

  1. Atualize a consulta para:

    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. Selecione Testar consulta para ver os resultados da consulta.

    Captura de ecrã que mostra a consulta com uma janela em cascata.

    Deverá ver resultados que contêm apenas 245 linhas e nomes de sensores em que a média temperada é superior a 100. Esta consulta agrupa a transmissão de eventos por dspl, que é o nome do sensor, e coloca-a numa Janela em Cascata de 30 segundos. As consultas temporais têm de indicar como pretende que o tempo progrida. Ao utilizar a cláusula TIMESTAMP BY , especificou a coluna OUTPUTTIME para associar tempos a todos os cálculos temporais. Para obter informações detalhadas, leia sobre as funções Gestão de Tempo e Janela.

Consulta: Detetar a ausência de eventos

Como podemos escrever uma consulta para encontrar uma falta de eventos de entrada? Vamos encontrar a última vez que um sensor enviou dados e, em seguida, não enviou eventos durante os próximos 5 segundos.

  1. Atualize a consulta para:

    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. Selecione Testar consulta para ver os resultados da consulta.

    Captura de ecrã que mostra a consulta que deteta a ausência de eventos.

    Aqui, vamos utilizar uma associação EXTERNA para a mesma transmissão de dados (associação automática). Para uma associação NTERNA, só é apresentado um resultado quando é encontrada uma correspondência. Numa associação EXTERNA, se um evento externo à associação não tiver qualquer correspondência, será apresentada a linha NULO para todas as colunas à direita. Esta técnica é útil para encontrar uma ausência de eventos. Para obter mais informações, consulte ASSOCIAR.

Conclusão

O objetivo deste artigo é demonstrar como escrever diferentes consultas da Linguagem de Consulta do Stream Analytics e ver os resultados no browser. No entanto, este artigo é apenas para começar. O Stream Analytics suporta várias entradas e saídas e até pode utilizar funções no Azure Machine Learning para torná-la uma ferramenta robusta para analisar fluxos de dados. Para obter mais informações sobre como escrever consultas, leia o artigo sobre padrões de consulta comuns.