Procesamiento de flujos de datos de IoT en tiempo real con Azure Stream Analytics

En este artículo, aprenderá a crear una lógica de procesamiento de flujos para recopilar datos desde dispositivos de Internet de las cosas (IoT). Usará un caso de uso real de Internet de las cosas para mostrar cómo puede crear una solución de forma rápida y económica.

Prerrequisitos

Escenario

Contoso, una empresa del sector de la automatización industrial, ha automatizado su proceso de fabricación. La maquinaria de esta planta cuenta con sensores capaces de emitir flujos de datos en tiempo real. En este escenario, un administrador del piso de producción desea tener información en tiempo real de los datos provenientes de los sensores para buscar patrones y llevar a cabo las acciones que sean necesarias. Puede usar el lenguaje de consulta de Stream Analytics (SAQL) sobre los datos de los sensores para encontrar patrones interesantes en los flujos de datos entrantes.

En este ejemplo, los datos se generan desde un dispositivo SensorTag de Texas Instruments. La carga de los datos está en formato JSON, tal y como se muestra en el siguiente fragmento de código de ejemplo:

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

En un escenario real, podría haber cientos de estos sensores generando eventos en forma de secuencia. Lo ideal sería que hubiera un dispositivo de puerta de enlace que ejecutara código para insertar estos eventos en Azure Event Hubs o en Azure IoT Hubs. Un trabajo de Stream Analytics ingeriría estos eventos desde Event Hubs o IoT Hubs y ejecutaría consultas de análisis en tiempo real en las transmisiones. Después, los resultados se podrían enviar a una de las salidas admitidas.

Para facilitar su uso, esta guía de introducción proporciona un archivo con datos de ejemplo que se capturan desde dispositivos de SensorTag reales. Puede ejecutar consultas en los datos de ejemplo y ver los resultados. En tutoriales subsiguientes, aprenderá a conectar el trabajo a las entradas y salidas y a implementarlas en el servicio de Azure.

Creación de un trabajo de Stream Analytics

  1. Acceda a Azure Portal.

  2. En el menú de navegación izquierdo, seleccione Todos los servicios, Análisis, mantenga el mouse sobre Trabajos de Stream Analytics y, a continuación, seleccione Crear.

    Captura de pantalla que muestra la selección del botón Crear para un trabajo de Stream Analytics.

  3. En la página Nuevo trabajo de Stream Analytics, siga estos pasos:

    1. En Suscripción, seleccione su suscripción de Azure.

    2. En Grupo de recursos, seleccione un grupo de recursos existente o cree uno.

    3. En Nombre, escriba un nombre único para el trabajo de Stream Analytics.

    4. Seleccione la región en la que desee crear el trabajo de Stream Analytics. Use la misma ubicación para el grupo de recursos y para todos los recursos con el fin de aumentar la velocidad de procesamiento y reducir los costes.

    5. Seleccione Revisar + crear.

      Captura de pantalla que muestra la página de trabajo Nueva instancia de Stream Analytics.

  4. En la página Revisar y crear, examine la configuración y seleccione Crear.

  5. Una vez completada la implementación con éxito, seleccione Ir al recurso para ir a la página Trabajo de Stream Analytics del trabajo de Stream Analytics.

Creación de una consulta de Azure Stream Analytics

Después de que se cree el trabajo, escriba una consulta. Puede probar las consultas con datos de ejemplo sin necesidad de conectar una entrada o salida a su trabajo.

  1. Descargue HelloWorldASA-InputStream.json desde GitHub.

  2. En la página Trabajo de Azure Stream Analytics de Azure Portal, seleccione Consulta en Topología de trabajo, en el menú de la izquierda.

  3. Seleccione Cargar entrada de ejemplo, seleccione el archivo HelloWorldASA-InputStream.json que descargó y seleccione Aceptar.

    Captura de pantalla que muestra la página **Consulta** con **Cargar entrada de muestra** seleccionado.

  4. Observe que se rellena automáticamente una vista previa de los datos en la tabla Vista previa de entrada.

    Captura de pantalla que muestra datos de entrada de ejemplo en la pestaña Vista previa de entrada.

Consulta: Archivado de los datos sin procesar

La forma más sencilla de una consulta es una consulta de paso a través que archiva todos los datos de entrada en la salida designada. Esta consulta es la consulta predeterminada que se rellena en un nuevo trabajo de Azure Stream Analytics.

  1. En la ventana Consulta, escriba la siguiente consulta y, a continuación, seleccione Consulta de prueba en la barra de herramientas.

    SELECT
        *
    INTO
        youroutputalias
    FROM
        yourinputalias
    
  2. Consulte los resultados en la pestaña Resultados de la prueba en el panel inferior.

    Captura de pantalla que muestra la consulta de ejemplo y sus resultados.

Consulta: Filtro de los datos en función de una condición

Actualicemos la consulta para filtrar los resultados según una condición. Por ejemplo, en la consulta siguiente se muestran los eventos que proceden de sensorA".

  1. Actualice la consulta con el ejemplo siguiente:

    SELECT 
        time,
        dspl AS SensorName,
        temp AS Temperature,
        hmdt AS Humidity
    INTO
       youroutputalias
    FROM
        yourinputalias
    WHERE dspl='sensorA'
    
  2. Seleccione Consulta de prueba para ver los resultados de la consulta.

    Captura de pantalla que muestra los resultados de la consulta con el filtro.

Consulta: Alertas para desencadenar un flujo de trabajo de negocio

Aumentemos el grado de detalle de la consulta. En cada tipo de sensor, deseamos supervisar la temperatura media por ventana de 30 segundos y mostrar los resultados solo si la temperatura media supera los 100 grados.

  1. Actualizar la consulta 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. Seleccione Consulta de prueba para ver los resultados de la consulta.

    Captura de pantalla que muestra la consulta con una ventana de saltos de tamaño constante.

    Debería ver los resultados que contienen solo las 245 filas y nombres de sensores en los que la temperatura promedio supera los 100 grados. Esta consulta agrupa el flujo de eventos por dspl, que es el nombre del sensor y con respecto a una ventana de saltos de tamaño constante de 30 segundos. Las consultas temporales deben indicar cómo desea que transcurra el tiempo. Mediante la cláusula TIMESTAMP BY, ha especificado la columna OUTPUTTIME para asociar los tiempos con todos los cálculos temporales. Para obtener información detallada, lea los artículos sobre Administración del tiempo y Funciones de ventana.

Consulta: Detección de la ausencia de eventos

¿Cómo podemos escribir una consulta que busque una falta de eventos de entrada? Busquemos la última vez que un sensor envió datos y luego no envió ningún evento en los 5 segundos posteriores.

  1. Actualizar la consulta 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. Seleccione Consulta de prueba para ver los resultados de la consulta.

    Captura de pantalla que muestra la consulta que detecta ausencia de eventos.

    Aquí vamos a usar una combinación LEFT OUTER en el mismo flujo de datos (autocombinación). Para una combinación INNER, solo se devuelve un resultado cuando se encuentra una coincidencia. En el caso de una combinación LEFT OUTER, si un evento procedente del lado izquierdo de la combinación no tiene coincidencia, se devolverá una fila con el valor NULL en todas las columnas de la derecha. Esta técnica resulta útil para buscar la ausencia de eventos. Para más información, consulte JOIN.

Conclusión

El objetivo de este artículo es mostrar cómo escribir diferentes consultas en el lenguaje de consulta de Stream Analytics y ver los resultados en el explorador. Sin embargo, este artículo sirve solamente como introducción. Stream Analytics admite varias entradas y salidas e, incluso, puede usar las funciones de Azure Machine Learning, lo que lo convierte en una herramienta sólida para el análisis de flujos de datos. Para más información acerca de cómo escribir consultas, lea el artículo sobre patrones comunes de consulta.