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
- Cree una suscripción de Azure gratuita.
- Descargue los archivos de datos y consultas de ejemplo desde GitHub.
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
Acceda a Azure Portal.
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.
En la página Nuevo trabajo de Stream Analytics, siga estos pasos:
En Suscripción, seleccione su suscripción de Azure.
En Grupo de recursos, seleccione un grupo de recursos existente o cree uno.
En Nombre, escriba un nombre único para el trabajo de Stream Analytics.
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.
Seleccione Revisar + crear.
En la página Revisar y crear, examine la configuración y seleccione Crear.
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.
Descargue HelloWorldASA-InputStream.json desde GitHub.
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.
Seleccione Cargar entrada de ejemplo, seleccione el archivo
HelloWorldASA-InputStream.json
que descargó y seleccione Aceptar.Observe que se rellena automáticamente una vista previa de los datos en la tabla 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.
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
Consulte los resultados en la pestaña Resultados de la prueba en el panel inferior.
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
".
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'
Seleccione Consulta de prueba para ver los resultados de la consulta.
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.
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
Seleccione Consulta de prueba para ver los resultados de la consulta.
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.
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
Seleccione Consulta de prueba para ver los resultados de la consulta.
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.