Consultas analíticas sobre Entidades (consultas mapeadas a fichero)
En Onesait Platform, una Entidad sobre la base de datos RealTime puede almacenar gran cantidad de información dependiendo del propósito de dicha Entidad, como puede ser por ejemplo una Entidad que recibe eventos de una red de cientos de dispositivos.
Para evitar problemas de colapso de memoria con consultas que no aplican criterios de límites sobre Entidades con gran número de registros, se configura a nivel de instalación el número de máximo de registros que devolverán dichas consultas.
Un ejemplo genérico se encuentra con la siguiente sentencia:
select * from MiEntidad;
En donde como respuesta se devolverá como máximo 2.000 registros, independientemente de si la Entidad tiene millones de registros.
Para facilitar el tratamiento de este tipo de sentencias en proyectos, desde la versión 6.3.1-Yoshi de Onesait Platform se va a incluir en el Digital Broker una operación para permitir la ejecución de sentencias sin clausulas de límite o con límites muy altos, cuyo resultado se volcará a un fichero que se pondrá disposición de los usuario.
¿Cómo se utiliza?
La operación disponible en el Digital Broker en el path /rest/ontology/{ontology}/file
tiene la siguiente interfaz, con los parámetros:

- ontology: Entidad sobre la que se realiza añadiendo un parámetro para el tipo de respuesta.
- query: tentencia a ejecutar.
- queryType: tipo de query (SQL o Nativa).
- responseType: destino del fichero a generar:
- DISK: el fichero se generará en un directorio configurable por instalación dentro del contenedor del Semantic Inf Broker, que se podrá mapear a un volumen compartido para que el fichero quede disponible para otros módulos, como por ejemplo DataFlow, Notebooks, etc.
- S3_MINIO: el fichero se genera en el bucket de MinIO del propietario del Digital Client.
- URL: el fichero se genera en un directorio mapeado en una carpeta compartida en el loadbalancer de la Plataforma, lo que permite descargarlo mediante una URL.
La respuesta del servicio será un JSON con la información donde localizar el fichero:
- Type Disk:

- Type URL:

- Type S3 (minIO):

Donde el archivo queda accesible en el Bucket del usuario:

Respuesta asíncrona
La respuesta del servicio es asíncrona, ya que en consultas sobre Entidades grandes, el tiempo de consulta puede ser elevado. Para ello, en el JSON de respuesta se incluye un identificador que permite consultar el estado de ejecución de la sentencia, pudiendo estar en:
- IN_PROGRESS: la sentencia se está ejecutando.
- FINISHED: la sentencia ha terminado y su resultado se ha volcado por completo al archivo.
La operación que permite consultar el estado está disponible en el Digital Broker en el path /rest/ontology/file/{queryId}/status
tiene la siguiente interfaz:

Por ejemplo:

Borrado de archivos
En el caso de que el resultado no sea almacenado en S3 (MinIO), el archivo quedará accesible durante un tiempo máximo de una hora. Transcurrido ese tiempo, el archivo será borrado y si no se ha descargado, será necesario volver a lanzar la sentencia.
Imagen de cabecera: Lukas Blazek en Unsplash