Etiquetas

, ,

En un post anterior mostré como procesar registros del event hub desde una aplicación en C#. Ahora bien, muchas veces solo necesitamos que los eventos dentro del hub sean almacenados en algún medio que nos permita realizar consultas, reportes, o alimenten a servicios que serán consumidos por otros sistemas. Si este es nuestro caso, entonces no es necesario realizar una aplicación que haga este procesamiento, en su lugar podemos utilizar las funciones de Stream Analytics.

Para el siguiente ejemplo vamos a asumir la siguiente arquitectura

4

En esta arquitectura el componente de Stream Analytics es el encargado de procesar los registros dentro del Event Hub y distruibuir la información hacia SQL Database y Document DB. Posteriormente existirán otros componentes dentro de la solución, como Web Apps, Worker Roles, etc. que consuman la información almacenada dentro de los repositorios.

Para este ejemplo vamos a asumir la existencia de un Event Hub a utilizar y una base de datos de SQL Database donde almacenaremos los registros.

La base de datos deberá tener una tabla con el siguiente formato. Por supuesto el formato de esta tabla de es ejemplo y los tipos de datos seleccionados no son los ideales, sin embargo el valor para un ejemplo es exactamente el mismo.

image

Primero debemos crear una instancia de Stream Analytics.

image

En nuestro caso le hemos dato el nombre de IoTDemoHuerto.

image

Una vez que se encuentra creado, vamos a configurar la entrada de datos con el Event hub que ya hemos creado anteriormente en Posts anteriores.

image

image

image

image

image

image

Una vez que hemos configurado la entrada, podemos visualizar los datos que llegan desde el Event Hub.

image

Seleccionamos la fecha de consulta

image

Descarga del archivo generado

image

En este caso es un archivo JSON:

image

Una vez que hemos configurado la fuente de datos de entrada, configuramos la salida hacia la base de datos de SQL Database.

image

image

image

image

Una vez ya especificada la entrada y la salida, procedemos a realizar la consulta de conversión de datos.

image

La consulta nos queda de esta forma:

image

Dentro de la consulta debemos visualizar las siguientes sentencias

SELECT En esta sección se especifican los valores que deben adquirir cada uno de los campos de la fuente de salida en función de los valores de entrada. Existen distintas funciones que se pueden utilizar.

INTO Aquí se especifica la fuente de datos en donde se debe mapear los campos especificados en la sección anterior.

FROM Aquí se configura la fuente de entrada, la cual también determina los campos que se pueden utilizar dentro del mapeo realizado en la sección SELECT. La palabra reservada TIMESTAMP BY va a especificar cual es la fecha de ese registro de datos desde el punto de vista de la aplicación que generó dicho evento, y no desde el punto de vista del momento en que es procesado por el componente de Stream Analytics. En este ejemplo podemos visualizar que dentro del from se indica que en el campo tt de la fuente de entrada se encuentra el time stamp del sistema origen, sin embargo, en la salida dentro del campo tt se ingresa el time stamp de procesamiento.

GROUP BY Esta sección nos sirve para agrupar los eventos de la fuente de entrada y que a la consulta ingrese un registro por cada grupo. Adicional a esto podemos visualizar la función TUMBLINGWINDOW en donde se encuentra configurada cada 10 segundos. Esta función nos permite generar una ventana de tiempo, la cual es fundamental para procesar los eventos de la entrada. En este ejemplo, se entiende que 10 segundos es muy poco tiempo para que los datos de entrada cambien sustancialmente y en ese sentido se realiza un promedio de los valores obtenidos durante esa ventana de tiempo. Incluso si estuviera configurado cada 60 segundos sería un tiempo bajo.