Compilación de una solución de IoT con Stream Analytics
Introducción
En esta solución, obtendrá información sobre cómo usar Azure Stream Analytics para obtener información de sus datos en tiempo real. Los desarrolladores pueden combinar fácilmente secuencias de datos, como secuencias de clic, registros y eventos generados por el dispositivo, con registros históricos o datos de referencia para obtener información empresarial. Azure Stream Analytics es un servicio de cálculo de transmisiones en tiempo real totalmente administrado y hospedado en Microsoft Azure que ofrece gran resistencia, baja latencia y escalabilidad, para permitirle ponerse a trabajar en cuestión de minutos.
Después de completar esta solución, podrá:
- Familiarizarse con el portal de Azure Stream Analytics.
- Configurar e implementar un trabajo de streaming.
- Señalar los problemas reales y solucionarlos usando el lenguaje de consulta de Stream Analytics.
- Desarrollar soluciones de streaming para los clientes usando el lenguaje de consulta de Stream Analytics.
- Usar la experiencia de supervisión y registro para solucionar problemas.
Requisitos previos
Necesita cumplir con estos requisitos previos para completar esta solución:
Introducción al escenario: "peajes".
Una estación de peaje es un fenómeno común. Se encuentra en muchas autopistas, puentes y túneles de todo el mundo. Cada estación de peaje tiene varias cabinas. En cabinas manuales, se detiene y paga el peaje a un operador. En cabinas automatizadas, un sensor situado en la parte superior de cada cabina escanea una tarjeta RFID que está ubicada en el parabrisas del vehículo al pasar la cabina de peaje. Es fácil imaginar el paso de los vehículos a través de estos peajes como si fuera un flujo de eventos sobre los que se pueden realizar operaciones interesantes.
Datos de entrada
Esta solución funciona con dos secuencias de datos. Los sensores instalados a la entrada y la salida de las estaciones de peaje producen la primera secuencia. La segunda secuencia es un conjunto de datos de búsqueda estática que tiene datos de registro del vehículo.
Flujo de datos de entrada
El flujo de datos de entrada contiene información sobre los vehículos que entran en las estaciones de peaje. Los eventos de datos de salida se transmiten a un centro de eventos desde una instancia de Web App incluida en la misma aplicación.
| TollID | EntryTime | LicensePlate | State | Make | Model | VehicleType | VehicleWeight | Toll | Tag |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 1 |2014-09-10 12:01:00.000 |JNB 7001 |NY |Honda |CRV |1 |0 |7 | |
| 1 |2014-09-10 12:02:00.000 |YXZ 1001 |NY |Toyota |Camry |1 |0 |4 |123456789 |
| 3 |2014-09-10 12:02:00.000 |ABC 1004 |CT |Ford |Taurus |1 |0 |5 |456789123 |
| 2 |2014-09-10 12:03:00.000 |XYZ 1003 |CT |Toyota |Corolla |1 |0 |4 | |
| 1 |2014-09-10 12:03:00.000 |BNJ 1007 |NY |Honda |CRV |1 |0 |5 |789123456 |
| 2 |2014-09-10 12:05:00.000 |CDE 1007 |NJ |Toyota |4x4 |1 |0 |6 |321987654 |
Breve descripción de las columnas:
Columna | Descripción |
---|---|
TollId | El identificador de la cabina de peaje que identifica de forma única una cabina de peaje. |
EntryTime | Fecha y hora de entrada del vehículo en la cabina de peaje en UTC. |
LicensePlate | Número de matrícula del vehículo. |
State | Estado de los Estados Unidos. |
Asegúrese | Fabricante del automóvil. |
Modelo | Número de modelo de vehículo. |
VehicleType | 1 para los vehículos de pasajeros o 2 para vehículos comerciales. |
WeightType | Peso del vehículo en toneladas; es 0 para vehículos de pasajeros. |
Toll | Costo del peaje en USD. |
Etiqueta | Etiqueta electrónica del vehículo que automatiza el pago; en blanco cuando el pago se realiza manualmente. |
Flujo de datos de salida
El flujo de datos de salida contiene información sobre los vehículos que salen de la estación de peaje. Los eventos de datos de salida se transmiten a un centro de eventos desde una instancia de Web App incluida en la misma aplicación.
TollId | ExitTime | LicensePlate |
---|---|---|
1 | 10-09-2014 T12:03:00.0000000Z | JNB 7001 |
1 | 10-09-2014 T12:03:00.0000000Z | YXZ 1001 |
3 | 10-09-2014 T12:04:00.0000000Z | ABC 1004 |
2 | 10-09-2014 T12:07:00.0000000Z | XYZ 1003 |
1 | 10-09-2014 T12:08:00.0000000Z | BNJ 1007 |
2 | 10-09-2014 T12:07:00.0000000Z | CDE 1007 |
Breve descripción de las columnas:
Columna | Descripción |
---|---|
TollId | El identificador de la cabina de peaje que identifica de forma única una cabina de peaje. |
ExitTime | La fecha y hora de salida del vehículo de la cabina de peaje en UTC. |
LicensePlate | Número de matrícula del vehículo. |
Datos de registro de vehículos comerciales
En la solución se usa una instantánea estática de una base de datos de registro de vehículos comerciales. Estos datos se guardan como archivo JSON en Azure Blob Storage, incluido en el ejemplo.
LicensePlate | RegistrationId | Expirada |
---|---|---|
SVT 6023 | 285429838 | 1 |
XLZ 3463 | 362715656 | 0 |
BAC 1005 | 876133137 | 1 |
RIV 8632 | 992711956 | 0 |
SNY 7188 | 592133890 | 0 |
ELH 9896 | 678427724 | 1 |
Breve descripción de las columnas:
Columna | Descripción |
---|---|
LicensePlate | Número de matrícula del vehículo. |
RegistrationId | Identificador de registro del vehículo. |
Expirada | El estado de registro del vehículo: 0 si el registro de vehículo está activo, 1 si el registro ha caducado. |
Configuración del entorno para Azure Stream Analytics
Para completar esta solución, necesita una suscripción de Microsoft Azure. Si no tiene una cuenta Azure, puede solicitar una versión de prueba gratuita.
Asegúrese de seguir los pasos de la sección "Limpieza de la cuenta de Azure" al final de este ejercicio para que pueda aprovechar al máximo su crédito de Azure.
Implementación del ejemplo
Existen varios recursos que se pueden implementar fácilmente en un grupo de recursos junto con algunos clics. La definición de la solución se hospeda en el repositorio de GitHub en https://github.com/Azure/azure-stream-analytics/tree/master/Samples/TollApp.
Implementación de la plantilla TollApp en Azure Portal
Para implementar el entorno TollApp en Azure, use este vínculo para implementar la plantilla de TollApp de Azure.
Si se le solicita hacerlo, inicie sesión en Azure Portal.
Elija la suscripción en la que se facturan los distintos recursos.
Especifique un grupo de recursos nuevo, con un nombre único, por ejemplo
MyTollBooth
.Seleccione una ubicación de Azure.
Especifique un intervalo como un número de segundos. Este valor se usa en la aplicación web de ejemplo, para saber con qué frecuencia enviar datos a un centro de eventos.
Active la casilla para aceptar los términos y condiciones.
Seleccione Anclar al panel para que pueda ubicar fácilmente los recursos más adelante.
Seleccione Comprar para implementar la plantilla de ejemplo.
Después de unos momentos, aparecerá una notificación para confirmar que la implementación se realizó correctamente.
Revisión de los recursos de TollApp de Azure Stream Analytics
Inicie sesión en Azure Portal.
Ubique el grupo de recursos que nombró en la sección anterior.
Compruebe que los recursos siguientes aparecen en el grupo de recursos:
- Una cuenta de Azure Cosmos DB
- Un trabajo de Azure Stream Analytics
- Una cuenta de Azure Storage
- Un centro de eventos de Azure
- Dos aplicaciones web
Inspeccione el trabajo de TollApp de ejemplo
A partir del grupo de recursos de la sección anterior, seleccione el trabajo de streaming de Stream Analytics que empieza por el nombre
tollapp
(el nombre contiene caracteres aleatorios para que sea único).En la página de información general del trabajo, observe el cuadro de consulta para ver la sintaxis de la consulta.
SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*) AS Count INTO CosmosDB FROM EntryStream TIMESTAMP BY EntryTime GROUP BY TUMBLINGWINDOW(minute, 3), TollId
Parafraseando la intención de la consulta, supongamos que necesita contar el número de vehículos que entran en una cabina de peaje. Como la cabina de peaje de una autopista tiene un flujo continuo de vehículos que ingresan, esos eventos de entrada son análogos a un flujo que nunca se detiene. Para cuantificar el flujo, debe definir un "período de tiempo" durante el cual realizar la medición. Vamos a refinar aún más la pregunta: "¿Cuántos vehículos entran en una cabina de peaje cada tres minutos?". Esto se conoce normalmente como recuento de saltos de página.
Como puede ver, Azure Stream Analytics usa un lenguaje de consulta que es similar a SQL y agrega algunas extensiones para especificar aspectos de la consulta relacionados con el tiempo. Para más información, lea sobre las construcciones de Administración del tiempo y Ventanas que se usan en la consulta.
Examine las entradas del trabajo de TollApp de ejemplo. Solo se usa la entrada EntryStream en la consulta actual.
- La entrada EntryStream es una conexión del centro de eventos que pone en cola los datos que representan cada vez que un automóvil entra a una cabina de peaje en la autopista. Los eventos los crea una aplicación web que forma parte del ejemplo y esos datos se ponen en cola en este centro de eventos. Observe que se consulta esta entrada en la cláusula FROM de la consulta de streaming.
- La entrada ExitStream es una conexión del centro de eventos que pone en cola los datos que representan cada vez que un automóvil sale de una cabina de peaje en la autopista. Esta entrada de streaming se usa en variaciones posteriores de la sintaxis de consulta.
- La entrada Registration es una conexión de Azure Blob Storage que señala a un archivo estático registration.json, el que se usa para las búsquedas según sea necesario. Esta entrada de datos de referencia se usa en variaciones posteriores de la sintaxis de consulta.
Examine las salidas del trabajo de TollApp de ejemplo.
- La salida de Azure Cosmos DB es un contenedor de bases de datos de Azure Cosmos DB que recibe los eventos del receptor de salida. Observe que esta salida se usa en la cláusula INTO de la consulta de streaming.
Inicio del trabajo de streaming TollApp
Siga estos pasos para iniciar el trabajo de streaming:
En la página de información general del trabajo, seleccione Iniciar.
En el panel Iniciar trabajo, seleccione Ahora.
Después de unos momentos, una vez que el trabajo esté en ejecución, en la página de información general del trabajo de streaming, consulte el gráfico de supervisión. El gráfico debería mostrar varios miles de eventos de entrada y decenas de eventos de salida.
Revisión de los datos de salida de Azure Cosmos DB
Ubique el grupo de recursos que contiene los recursos de TollApp.
Seleccione la cuenta de Azure Cosmos DB con el patrón de nombre tollapp<random>-cosmos.
Seleccione el encabezado del Explorador de datos para abrir la página del Explorador de datos.
Expanda tollAppDatabase>tollAppCollection>Documents.
En la lista de identificadores, se muestran varios documentos una vez que la salida está disponible.
Seleccione cada identificador para revisar el documento JSON. Observe cada
tollid
,windowend time
y elcount of cars
de esa ventana.Después de otros tres minutos, otro conjunto de cuatro documentos estará disponible, un documento por
tollid
.
Informe del tiempo total de cada automóvil
El tiempo medio que necesita un vehículo para pasar el peaje ayuda a evaluar la eficacia del proceso y la experiencia del cliente.
Para encontrar el tiempo total, combine la secuencia EntryTime con la secuencia ExitTime. Combine los dos flujos de entrada de las columnas coincidentes iguales TollId y LicencePlate. El operador JOIN requiere que especifique un margen temporal que describa la diferencia de tiempo aceptable entre los eventos combinados. Use la función DATEDIFF para especificar que los eventos no deben durar más de 15 minutos entre sí. Aplique también la función DATEDIFF a las horas de entrada y salida para calcular el tiempo real que pasa un vehículo en la estación de peaje. Tenga en cuenta la diferencia del uso de DATEDIFF en una instrucción SELECT en comparación con su uso en una condición JOIN.
SELECT EntryStream.TollId, EntryStream.EntryTime, ExitStream.ExitTime, EntryStream.LicensePlate, DATEDIFF (minute, EntryStream.EntryTime, ExitStream.ExitTime) AS DurationInMinutes
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN ExitStream TIMESTAMP BY ExitTime
ON (EntryStream.TollId= ExitStream.TollId AND EntryStream.LicensePlate = ExitStream.LicensePlate)
AND DATEDIFF (minute, EntryStream, ExitStream ) BETWEEN 0 AND 15
Para actualizar la sintaxis de la consulta del trabajo de streaming de TollApp:
En la página de información general del trabajo, seleccione Detener.
Espere unos momentos para ver la notificación que indica que el trabajo se detuvo.
En el encabezado TOPOLOGÍA DE TRABAJO, seleccione <>Consulta
Pegue la consulta SQL de streaming ajustada.
Seleccione Guardar para guardar la consulta. Seleccione Sí para confirmar y guardar los cambios.
En la página de información general del trabajo, seleccione Iniciar.
En el panel Iniciar trabajo, seleccione Ahora.
Revisión del tiempo total en la salida
Repita los pasos de la sección anterior para revisar los datos de salida de Azure Cosmos DB del trabajo de streaming. Revise los documentos JSON más recientes.
Por ejemplo, en este documento se muestra un automóvil de ejemplo con determinado número de licencia, la entrytime
y la exit time
, además del campo durationinminutes
donde se calcula DATEDIFF que muestra la duración de la cabina de peaje con un valor de dos minutos:
{
"tollid": 4,
"entrytime": "2018-04-05T06:51:39.0491173Z",
"exittime": "2018-04-05T06:53:09.0491173Z",
"licenseplate": "JVR 9425",
"durationinminutes": 2,
"id": "ff52eb25-d580-7566-2879-1f52bba6601e",
"_rid": "+8E4AI1DZgBjAAAAAAAAAA==",
"_self": "dbs/+8E4AA==/colls/+8E4AI1DZgA=/docs/+8E4AI1DZgBjAAAAAAAAAA==/",
"_etag": "\"ad02f6b8-0000-0000-0000-5ac5c8330000\"",
"_attachments": "attachments/",
"_ts": 1522911283
}
Informe de los vehículos con registro expirado
Azure Stream Analytics puede usar instantáneas estáticas de datos de referencia para combinar con flujos de datos temporales. Para demostrar esta funcionalidad se usará la siguiente pregunta de ejemplo. La entrada Registration es un archivo JSON de blob estático que muestra las expiraciones de las licencias. Si se combinan con la licencia, los datos de referencia se comparan con cada vehículo que pasa por la cabina de peaje.
Si un vehículo comercial está registrado en la empresa de peaje, puede atravesar la cabina sin detenerse para inspección. Use la tabla de búsqueda de registro para identificar todos los vehículos comerciales con registros expirados.
SELECT EntryStream.EntryTime, EntryStream.LicensePlate, EntryStream.TollId, Registration.RegistrationId
INTO CosmosDB
FROM EntryStream TIMESTAMP BY EntryTime
JOIN Registration
ON EntryStream.LicensePlate = Registration.LicensePlate
WHERE Registration.Expired = '1'
Repita los pasos de la sección anterior para actualizar la sintaxis de consulta del trabajo de streaming de TollApp.
Repita los pasos de la sección anterior para revisar los datos de salida de Azure Cosmos DB del trabajo de streaming.
Salida de ejemplo:
{
"entrytime": "2018-04-05T08:01:28.0252168Z",
"licenseplate": "GMT 3221",
"tollid": 1,
"registrationid": "763220582",
"id": "47db0535-9716-4eb2-db58-de7886966cbf",
"_rid": "y+F8AJ9QWACSAQAAAAAAAA==",
"_self": "dbs/y+F8AA==/colls/y+F8AJ9QWAA=/docs/y+F8AJ9QWACSAQAAAAAAAA==/",
"_etag": "\"88007d8d-0000-0000-0000-5ac5d7e20000\"",
"_attachments": "attachments/",
"_ts": 1522915298
}
Escalado horizontal del trabajo
Azure Stream Analytics está diseñado para escalarse elásticamente de forma que pueda controlar grandes volúmenes de datos. Las consultas de Stream Analytics puede usar una cláusula PARTITION BY para indicar al sistema que este paso se escala horizontalmente. PartitionId es una columna especial que agrega el sistema para que coincida con el identificador de partición de la entrada (centro de eventos).
Para escalar horizontalmente la consulta a particiones, edite la sintaxis de la consulta al código siguiente:
SELECT TollId, System.Timestamp AS WindowEnd, COUNT(*)AS Count
INTO CosmosDB
FROM EntryStream
TIMESTAMP BY EntryTime
PARTITION BY PartitionId
GROUP BY TUMBLINGWINDOW(minute,3), TollId, PartitionId
Para escalar verticalmente el trabajo de streaming a más unidades de streaming:
Detenga el trabajo actual.
Actualice la sintaxis de la consulta en la página <> Consulta y guarde los cambios.
En el encabezado CONFIGURAR del trabajo de streaming, seleccione Escalar.
Deslice el control deslizante Unidades de streaming de 1 a 6. Las unidades de streaming definen la cantidad de capacidad de proceso que el trabajo puede recibir. Seleccione Guardar.
Inicie el trabajo de streaming para mostrar la escala adicional. Azure Stream Analytics distribuye el trabajo en más recursos de proceso y alcanza un mejor rendimiento, mediante la partición del trabajo entre los recursos a través de la columna designada en la cláusula PARTITION BY.
Supervisión del trabajo
El área SUPERVISIÓN contiene estadísticas sobre el trabajo en ejecución. La primera vez, se necesita configuración para usar la cuenta de almacenamiento en la misma región (llamada toll como en el resto de este documento).
También, puede acceder a Registros de actividad desde el área de Configuración del panel del trabajo.
Limpieza de los recursos de TollApp
Detenga el trabajo de Stream Analytics desde Azure Portal.
Ubique el grupo de recursos que contenga ocho recursos relacionados con la plantilla de TollApp.
Seleccione Eliminar grupo de recursos. Escriba el nombre del grupo de recursos para confirmar la eliminación.
Conclusión
En esta solución se introdujo el servicio Azure Stream Analytics. Se ha demostrado cómo configurar entradas y salidas de un trabajo de Stream Analytics. Mediante el escenario de datos de peaje, se han explicado los tipos más comunes de problemas que surgen en el espacio de datos en movimiento y cómo pueden resolverse con simples consultas de tipo SQL en Azure Stream Analytics. Asimismo, se han descrito las construcciones de extensión SQL para trabajar con datos temporales. Se ha mostrado cómo combinar secuencias de datos, cómo enriquecer la secuencia de datos con datos de referencia estáticos y cómo escalar una consulta horizontalmente para lograr un mayor rendimiento.
Aunque esta solución proporciona una buena introducción, no está completo de en modo alguno. Puede encontrar más patrones de consulta que usan el lenguaje SAQL en Ejemplos de consulta para patrones de uso comunes de Stream Analytics.