Soporte para consultas SQL en BDTR

La implementación de referencia de Sofia2, se apoya en MongoDB como Base de Datos de Tiempo Real (RTDB), siendo la principal elección, de entre las disponibles (MongoDB, Oracle, PostgreSQL, Kudu…) en la mayoría de las instalaciones de la plataforma Sofia2.

bdtr

MongoDB es una de las bases de datos NoSQL más popular en el mercado, gracias sus características de almacenamiento de información desestructurada y velocidad de respuesta, así como su estrategia Open Source.

El principal reto que afronta cualquier usuario de MongoDB es utilizar el lenguaje de consulta nativo de la base de datos, que si bien es muy potente, requiere de un periodo de aprendizaje. Ya que es muy diferente al ampliamente extendido lenguaje SQL. Por ejemplo, el equivalente a la sentencia SQL:

SELECT * FROM inventory WHERE status = "A" AND ( qty >= 30 OR item LIKE "p%")

sería:

db.inventory.find( { status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ]} )

En Sofia2 para simplificar el acceso a la BDTR a cualquier usuario, independientemente de su conocimiento de MongoDB, se dispone de la posibilidad de además del lenguaje nativo de la BDTR, utilizar un lenguaje de consulta SQL LIKE, que proporciona un subconjunto de instrucciones del estandar SQL, que recubren algunas de las operaciones nativas de acceso a la BDTR de uso  mas frecuente.

En los últimos años, el crecimiento en el uso de bases de datos NoSQL en entornos empresariales y la necesidad de explotar la información mediante herramientas analíticas, ha propiciado que surjan herramientas para consultar dicha información de una forma estandar. Una de las mas potentes es Quasar-Analytics que proporciona un lenguaje de consulta SQL estandar sobre diferentes motores NoSQL, entre ellos MongoDB. (Que es quasar-analytics).

En la última release de Sofia2 se ha integrado Quasar-Analytics en la plataforma para proporcionar soporte a consultas SQL sobre la BDTR, ofreciendo de este modo en Sofia2 todo el conjunto de clausulas y operadores proporcionados por Quasar.

Entre las capacidades más potentes del lenguaje destacan:

  • JOINs: Permitiendo combinar documentos de varias ontologías en la misma sentencia:

joinQ

joinR.png

  • OFFSET y LIMIT: Permitiendo paginación en la consulta de resultados

OffsetLimit.png

  • GROUP BY y HAVING: Permitiendo agrupaciones y funciones de agregado

grouphaving

groupbyhavingResultado

La especificación completa del SQL soportado por quasar-analytic la encontramos en: http://quasar-analytics.org/docs/sqlreference/

La integración de Quasar-analytics en la plataforma Sofia2 se ha realizado a tres niveles:

  • Consola de administración: Los usuarios de la plataforma pueden consultar la BDTR utilizando el lenguaje SQL de Quasar, pudiendo optar por recibir el resultado en formato JSON o Tabla

consola1.png

  • Protocolo de mensajeria SSAP: Los desarrolladores de ThinKPs disponen de un nuevo tipo de query, denominado SQL, que permite lanzar consultas sobre la BDTR utilizando el motor de Quasar.MQTT, Websocket, AjaxPush: Para estos protocolos se dispone de un nuevo tipo de mensaje incluye los siguiente campos:
    • queryType: SQL. Indica que se trata de una consulta SQL que se dirigirá al motor de Quasar.
    • offset: Opcional. Indica el número de registro resultante a partir del que enviar datos en la respuesta. Por defecto cero.
    • resultFormat: Opcional. Puede tomar los valores TABLE o JSON. Indica el formato en el que se debe devolver la respuesta. Por defecto JSON.
    • formatter: Opcional. Mediante extensiones de tipo Plugin, se pueden incluir en Sofia2 formateadores de la respuesta (Pej: devolver la respuesta en formato tabla HTML). Cada formateador se identifica por una clave, que sería el valor que tomaría este campo.

 Un ejemplo construcción del mensaje seria:

SSAPMessage<SSAPBodyQueryMessageQuasar> mensaje = new SSAPMessage<SSAPBodyQueryMessageQuasar>();
mensaje.setSessionKey(sessionKey);
SSAPBodyQueryMessageQuasar body = new SSAPBodyQueryMessageQuasar();
body.setQuery(“Select * from OntologiaTest where contextData.user=’defaultUser’”);
body.setQueryType(SSAPQueryType.SQL);
body.setOffset(10);
body.setResultFormat(SSAPQueryResultFormat.TABLE);
mensaje.setBodyAsObject(body);
mensaje.setDirection(SSAPMessageDirection.REQUEST);
mensaje.setMessageType(SSAPMessageTypes.QUERY);

 A su vez si la respuesta es en formato tabla, el mensaje SSAP de respuesta incluye un     nuevo campo que permite interpretarla:

contentType: text/csv; columnDelimiter=”,”; rowDelimiter=”\\r\\n”; quoteChar=”\””; escapeChar=”\””;charset=UTF-8

REST: Para protocolo REST se dispone de una nueva operación en el API:

rest.pngrest2.png

En caso de elegir resultado en formato TABLE, la forma de interpretar el resultado viene en la cabecera de respuesta Data-Content-Type:

rest3.png

  • Data Lake BDTR: Sistemas externos pueden conectarse a la BDTR de Sofia2 a través de un API REST utilizando las credenciales de Sofia2, de manera que solo dispondrán de acceso a aquellas colecciones que se correspondan con ontologias sobre las que tengan permiso, pero sin tener que actuar como un ThinKP ni mantener activa una sessionkey.
    El API REST del data lake que da acceso a la BDTR tiene las siguientes propiedades:

    • Endpoint:  http://://services/bdtr/v01/SQL?query=&offset=&limit=
    • Cabeceras de entrada:
      • Authorization=Base64(usuario:SHA1(usuarioSofia2@passwordSofia2))
      • Accept= {text/csv| application/json} à Es el formato de respuesta esperado. En caso de Tabla hay que especificar text/csv.
      • Response-Format=
    • Cabeceras de salida:
      • Content-Type= Content type de la respuesta. En caso de formato Tabla (text/csv), ayuda a interpretar los datos de salida para interpretar la tabla. Si no aplica formateador customizado devolverá algo de este estilo:

 Content-Type: text/csv; columnDelimiter=”,”; rowDelimiter=”\\r\\n”; quoteChar=”\””; escapeChar=”\””; charset=UTF-8

 

En caso de aplicar un formateador, el programador del formateador puede asignar el Content-Type a devolver.

Por razones de seguridad, el acceso al API REST del data lake está bloqueado en CloudLab sofia2.com.

Soporte para consultas SQL en BDTR

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s