Query OLAP Mondrian (MDX, XMLA) con un'interfaccia Python?
Domanda
In realtà sto usando R + Python con RPY2 per manipolare i dati e ggplot per creare bella grafica .. ho alcuni dati in un database PostgreSQL, e sto usando psycopg2 ai dati della query.
sto iniziando una tesi, e in futuro mi bisogno di un cubo OLAP per negozio la mia (molto grande) dati di simulazione:. dimensione multipla, interrogazione di aggregazione, ecc
C'è qualche buona pratica o standard per l'interfacciamento tra il Python (e voglio Python + R, non JPivot o qualche altro cruscotto in Java) e un motore OLAP come Mondrian ? Ho cercato su Google per qualsiasi soluzione, e non ho trovato nulla.
Sono brevemente Evaluated SQLAlchemy , e Django-ORM, ma non sono MDX o / un'interfaccia alla domanda un server OLAP XML (Mondrian o altro) ...
E 'possibile scrivere una query in MDX e, con psycopg + ODBC, interrogare il mio OLAP Server, e il server OLAP dandomi una risposta da parte dei miei dati di simulazione (senza mappatura su un oggetto Python, ma va bene per me)?
Aggiornamento 1:
Perché ho bisogno di cercare in giro tecnologia OLAP + Mondrian?
Università di Laval (GeoSoa dipartimenti + Thierry Badard) ha scritto un spaziale estensione OLAP: SOLAP e implementato questo in Mondrian come GeoMondrian . Che mi interessano perché sto lavorando sulla simulazione basato spaziale a più agenti (~ = geosimulation).
Il dipartimento GeoSoa creato un componente basato Ajax per comunicare e visualizzare dati spaziali con GeoMondrian:. SOLAPLAYERS, che può interrogare un server Mondrian dal suo servlet Xlma
Problema: probabilmente lento nel grande manipolazione dei dati, necessità di Internet o Apache 2. In breve, è solo di visualizzare i dati o mappa ... Nel mio caso, ho bisogno di dati grezzi di fare il mio di manipolazione dei dati + grafica con R: spaziale l'analisi, l'analisi di regressione, rango-coda, ecc Qui, SOLAP mi aiutano a preparare i dati per questo più tardi complessa analisi R.
Perché Python?
1 - l'accesso Web ai dati spaziali -
Sto cercando di utilizzare un "cool" quadro Python, come GeoDjango o MapFish : grande comunità in GIS, open-source, utilizzare GeoAlchemy manipolare interroga / dati spaziali, includono visualizzazione con estensioni JavaScript e OpenLayers , ecc.
2 - L'accesso locale ai dati territoriali in GIS -
Voglio creare un plugin in QGIS (GIS open source) per accedere e visualizzare i dati, e QGIS plug-in e API = Python.
3 - l'analisi automatica dei dati -
Un utente o uno scienziato esegue una simulazione con grid computing e scegliere l'analisi automatica (R + ggplot2 + MDX query) si desidera eseguire su questi dati. Il mio obiettivo è quello di creare un rapporto di sintesi della simulazione (grafica, i dati tabulari, ecc.).
Quindi, dopo la simulazione, i dati andare a OLAP / SOLAP cubo, e molti script Python (creati dall'utente) ottenere dati con MDX, manipolare i dati con R + RPY2, e scrivere e produrre uscita di raffreddamento per lo scienziato su doku- wiki o di un'altra comunità-piattaforma.
Problema?
1 - Olap4j, il nucleo API di Mondrian per comunicare con un componente esterno, è Java-fatta: /
2 - SOLAPLAYERS usos Ajax per accedere ai dati, troppo lento per me.
3 - SQLAlchemy e GeoAlchemy hanno alcuna connessione conducente di un database multidimensionale (OLAP)
.* Soluzione? *
1 - Py4j per l'accesso agli oggetti Java o Java raccolta in olap4j con Python? Scrivere il mio funzione per accedere al Java mappata collezione? => Pericolosa e non molto facile? ...
2 - XLMA con il server Ajax Mondrian? E 'troppo lento.
3 - scrivere il mio py-connettore per OLAP Mondrian? => Ouch. E 'un modo più difficile, credo.
Che cosa devo fare?
Soluzione
Come sapete, Mondrian è un motore completo OLAP scritto in Java in cima ad un database come MySQL. Quindi, se ho capito la tua domanda, si desidera utilizzare Mondrian e mi chiedo come interfacciarsi con Python.
Io uso Mondrian confezionato in un .jar alle domande processo MDX sulla riga di comando e un rimando JSON. Python chiama direttamente nella riga di 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]')
E per l'utilizzo del server, Che tipo di imballaggio in un servlet e mando MDX con l'Ajax. Le chiamate Ajax non sono una grande testa e questo è il motivo per cui non vedo la necessità di accoppiare Python e Java piuttosto che la comunicazione con il server di Mondrian.
Altri suggerimenti
Non so python, ma sono autore di Mondrian / olap4j.
Se è possibile utilizzare py4j per l'accesso olap4j, grande. In caso contrario, sicuramente in considerazione XMLA. Esso non può essere così lento come si pensa (a meno che parsing XML di Python è lento). Il problema più grande è la complessità della costruzione di richieste SOAP e comprendere le risposte.
Julian
Per molto grande cubi di dati deposito e prelievo, stoccaggio HDF5 funziona abbastanza bene (h5py o PyTables per un'interfaccia Python). L'applicazione può quindi sia eseguito su un computer con una copia locale del database HDF5 o fare un soluzione server ad-hoc (ancora in Python).
ho progettato / strategie di storage HDF5 SQL ibridi quando necessario, e si sta eseguendo piuttosto bene.
Se davvero bisogno il linguaggio di query MDX:
-
come un ORM ( risposte precedenti su StackOverflow)
-
cubulus (anche se solo un sottoinsieme di MDX è implementato)
-
eseguire l'OLAP di vostra scelta, come un server separato e comunicare con esso tramite un ad-hoc di interfaccia (XML potrebbe anche essere attraverso http).
Per completare un po ', ho appena scoperto questo pacchetto python al server di accesso XMLA: www . Si dice che sta lavorando con Mondrian, icCube, MSAS.