2010-09-25 17 views
8

Actualmente estoy usando R + Python con RPY2 para manipular datos y ggplot para crear hermosos gráficos ... Tengo algunos datos en una base de datos PostgreSQL, y estoy usando psycopg2 para consultar datos.¿Quieres consultar OLAP Mondrian (MDX, XMLA) con una interfaz de Python?

estoy empezando una tesis, y en el futuro voy a necesitar un OLAP cube para guardar mi (muy grande) de datos de simulación: la dimensión múltiple, consulta la agregación, etc.

¿Hay alguna mejor o la norma de buenas prácticas para la interconexión entre Python (y quiero Python + R, no jpivot o algún otro panel en Java) y un motor OLAP como Mondrian? Busqué en Google cualquier solución y no encontré nada.

he evaluado brevemente SQLAlchemy, y Django-ORM, pero no tienen MDX o XML/Una interfaz para consultar un servidor OLAP (Mondrian o de otro tipo) ...

¿Es posible escribir una consulta en MDX y, con psycopg + ODBC, consultar el servidor OLAP, y el servidor OLAP dándome una respuesta de mis datos de simulación (sin mapeo en el objeto Python, pero está bien para mí)?

Actualización 1:

¿Por qué tengo que buscar en la tecnología OLAP Mondrian +?

Debido University of Laval (GeoSoa departamentos + Thierry Badard) escribió una extensión espacial de OLAP: SOLAP, e implementado en esta Mondrian como GeoMondrian. Eso me interesa porque estoy trabajando en la simulación espacial basada en múltiples agentes (~ = geosimulación).

El departamento GeoSoa creó un componente basado en Ajax para comunicar y visualizar datos espaciales con GeoMondrian: SOLAPLAYERS, que puede consultar un servidor Mondrian mediante su servlet Xlma.

Problema: probablemente sea lento en la manipulación de grandes volúmenes de datos, necesite Internet o Apache 2. Brevemente, es solo para visualizar datos o mapas ... En mi caso, necesito datos brutos para hacer mis propios gráficos + manipulación de datos con R: análisis espacial, análisis de regresión, rank-tail, etc. Aquí, SOLAP me ayuda a preparar los datos para este posterior análisis complejo de R.

¿Por qué Python?

1 - acceso a la Web a datos espaciales -

Estoy tratando de utilizar un marco de "fresco" de Python, como GeoDjango o MapFish: gran comunidad en SIG, de código abierto, utilice GeoAlchemy para manipular espacial consulta/datos que incluyen la visualización con extensiones de JavaScript y OpenLayers, etc.

2 - el acceso local a los datos espaciales en SIG -

Quiero crear un plugin en QGIS (abierta SIG de código) para acceder y visualizar d ata, y el complemento QGIS y API = Python.

3 - análisis automático de los datos -

Un usuario o científico ejecuta una simulación con la computación de rejilla y elija análisis automático (R + ggplot2 + MDX consulta) que quieren correr en estos datos.Mi objetivo aquí es crear un informe sintético de la simulación (gráficos, datos tabulares, etc.).

Entonces, después de la simulación, los datos van al cubo OLAP/SOLAP, y muchos scripts Python (creados por el usuario) obtienen datos con MDX, manipulan datos con R + RPY2 y escriben y producen resultados interesantes para el científico en doku -wiki u otra plataforma comunitaria.

¿Problemas?

1 - Olap4j, el núcleo de la API de Mondrian para comunicarse con un componente externo, es Java hizo-:/

2 - SOLAPLAYERS utiliza Ajax para acceder a los datos, demasiado lento para mí.

3 - SQLAlchemy y GeoAlchemy no tienen conexión de controlador a una base de datos multidimensional (OLAP).

* ¿Solución? *

1 - Py4j para acceder a objetos Java o colecciones Java en olap4j con Python? ¿Escribir mi propia función para acceder a la colección mapeada de Java? => peligroso y no es muy fácil? ...

2 - XLMA con servidor Ajax Mondrian? Es muy lento.

3 - ¿Escribir mi propio conector py a OLAP Mondrian? => Ouch. Es una manera dura, creo.

¿Qué debo hacer?

+0

Estoy buscando una solución, parece que puedo intentar enlazar el software de llamadas olap4j (java) y pythonToJava como JPype o Py4j ... ¿Otra persona tiene alguna otra respuesta o comentario aquí? – reyman64

+0

Solo se lo dejo saber, hay una [tabla dinámica javascript] (http://webpivottable.com) puede pivotar cubos XMLA OLAP con una interfaz de usuario intuitiva y un gran rendimiento. [demo] (http://webpivottable.com/demo) y [documentos] (http://webpivottable.com/documents) –

Respuesta

4

Como saben, Mondrian es un motor OLAP completa escrito en Java en la parte superior de una base de datos como MySQL. Entonces, si entiendo su pregunta, quiere usar Mondrian y preguntarse cómo interactuar con Python.

Uso Mondrian empaquetado en .jar para procesar consultas MDX en la línea de comandos y devolver un JSON. Python lo llama directamente en la línea de comando.

import commands 
result = commands.getoutput('java -jar Mondrian_cli.jar -q 
select NON EMPTY Crossjoin({[Measures].[Store Sales]}, 
Crossjoin([Time].[1997].Children, [Store].[All Stores].Children)) ON COLUMNS, 
[Product].[All Products].Children ON ROWS from [Sales]') 

Y para el uso del servidor, lo incluyo en un servlet y envío MDX con ajax. Las llamadas ajax no son una gran sobrecarga y es por eso que no veo la necesidad de acoplar Python y Java en lugar de simplemente comunicarnos con el servidor de Mondrian.

+0

gracias por esta respuesta :) – reyman64

2

Para almacenamiento y recuperación de cubos de datos muy grandes, el almacenamiento HDF5 funciona bastante bien (h5py o PyTables para una interfaz de Python). Su aplicación puede entonces ejecutarse en una máquina con una copia local de la base de datos HDF5 o crear una solución de servidor ad-hoc (aún en Python).

He estado diseñando estrategias de almacenamiento híbrido SQL/HDF5 cuando es necesario, y están funcionando bastante bien.

Si realmente necesita el lenguaje de consulta MDX:

  • as an ORM (respuestas anteriores sobre stackoverflow)

  • cubulus (aunque sólo se implementa un subconjunto de MDX)

  • corren el OLAP de su elección como un servidor separado y comunicarse con él a través de una interfaz ad-hoc (incluso podría ser XML a través de http).

+0

Quizás HDF5 es una mejor solución para el almacenamiento, pero necesito absolutamente una base de datos como PG + OLAP. con lenguaje de consulta simple como MDX o SQL para manipular/agregar/visualizar la dimensión fácilmente. Es para usuarios científicos principiantes ... – reyman64

6

No sé python, pero yo soy el autor de mondrian/olap4j.

Si puede usar py4j para acceder a olap4j, genial. Si no, definitivamente considere XMLA. Puede que no sea tan lento como piensas (a menos que el análisis XML de Python sea lento). El mayor problema es la complejidad de construir solicitudes SOAP y entender las respuestas.

Julian

1

Para completar un poco, acabo de descubrir este paquete de python para acceder al servidor XMLA: www. Dice que está trabajando con Mondrian, icCube, MSAS.

Cuestiones relacionadas