Optiq: un Front SQL para cualquiera fuente de datos

Optiq,es un framework Open Source para realizar consultas sobre cualquier fuente de datos. Permite extenderse a sistemas de back-end, incluyendo NoSQL y Hadoop. Define reglas que optimizan la capacidad de procesamiento de las query.

Características que presenta:

· Permite escribir querys SQL para cualquier fuente de datos.

· No es una base de datos

· Es un framework que media entre las fuentes de datos, el procesamiento de los recursos y el cliente. Optimiza los recursos.

· Es dinámicamente extensible. Se pueden añadir front-ends: SQL/JDBC and LINQ, back-ends como bases de datos JDBC, HDFS/Hadoop, archivos planos, etc.

· Añadir operadores y reglas de transformación.

· Desarrollado en Java

· El proyecto OptiQ-csv proporciona un adaptador CSV, que es totalmente funcional para su uso en aplicaciones, pero también puede servir como plantilla para implementar nuestros propios adaptadores.

· Soporte para leer modelos en formato JSON

· Analizador de consultas, validación y optimizador.

Un ejemplo de cómo utilizar Optiq con MongoDB lo encontramos en el blog de Julian Hyde creador de Mondrian y de este proyecto.

· Instalamos MongoDB e importamos el conjunto de datos de MongoDB

· Nos logeamos en MongoDB para comprobar que tenemos acceso a los datos

· Optiq tiene un modelo de ejemplo en formato JSON y sqline, Shell SQL. Conectamos usando el modelo Optiq mongo-zips-model.json que incluye del siguiente modo:

· Lanzamos una consulta sencilla

· Y salimos de la sqlline

Podemos ver cómo se implementan las querys con SQL EXPLAIN

sqlline> !set outputformat csv

sqlline> EXPLAIN PLAN FOR

. . . .> SELECT count(DISTINCT state) AS c FROM zips WHERE city = ‘SPRINGFIELD’;

‘PLAN’

‘EnumerableAggregateRel(group=[{}], C=[COUNT($0)])

EnumerableAggregateRel(group=[{0}])

EnumerableCalcRel(expr#0..4=[{inputs}], expr#5=[‘SPRINGFIELD’], expr#6=[=($t0,
$t5)], STATE=[$t3], $condition=[$t6])

MongoToEnumerableConverter

MongoTableScan(table=[[mongo_raw, zips]], ops=[[<{city: 1, state:
1, _id: 1}, {$project …}>]])

1 row selected (0.115 seconds)

 

El proyecto lo podemos encontrar en github

Una presentación interesante SQL on Big Data using Optiq

Deja un comentario