2010-09-25 23 views
8

Eigentlich verwende ich R + Python mit RPY2, um Daten zu manipulieren und ggplot, um schöne Grafiken zu erstellen .. Ich habe einige Daten in einer PostgreSQL-Datenbank, und ich verwende psycopg2, um Daten abzufragen.Abfrage OLAP Mondrian (MDX, XMLA) mit einer Python-Schnittstelle?

Ich beginne eine These, und in der Zukunft brauche ich ein OLAP cube meine (sehr groß) Simulationsdaten zu speichern: mehrdimensionale, Aggregation Abfrage usw.

Gibt es eine beste oder gängige Praxis für die Anbindung zwischen Python (und ich möchte Python + R, kein jpivot oder ein anderes Dashboard in Java) und eine OLAP-Engine wie Mondrian? Ich suchte auf Google nach einer Lösung und habe nichts gefunden.

ich kurz habe ausgewertet SQLAlchemy und Django-ORM, aber sie haben keine MDX oder XML/A-Schnittstelle, einen OLAP-Server (Mondrian oder andere) abfragen ...

Ist es möglich, eine Abfrage zu schreiben in MDX und, mit psycopg + ODBC, Abfrage mein OLAP-Server, und der OLAP-Server gibt mir eine Antwort aus meinen Simulationsdaten (keine Zuordnung auf Python-Objekt, aber es ist in Ordnung für mich)?

Update 1:

Warum muss ich um OLAP + Mondrian Technologie suchen müssen?

Da University of Laval (GeoSoa Departemente + Thierry Badard) hat eine räumliche Ausdehnung auf OLAP: SOLAP und realisiert dies in Mondrian als GeoMondrian. Das interessiert mich, weil ich an räumlicher multiagentenbasierter Simulation arbeite (~ = Geosimulation).

Das GeoSoa-Departement hat eine Ajax-basierte Komponente zur Kommunikation und Visualisierung räumlicher Daten mit GeoMondrian: SOLAPLAYERS erstellt, die einen Mondrian-Server über das Xlma-Servlet abfragen können.

Problem: wahrscheinlich langsam in Big Data Manipulation, brauchen Internet oder Apache 2. Kurz gesagt, es ist nur zur Visualisierung von Daten oder Karte ... In meinem Fall brauche ich Rohdaten, um meine eigenen Daten Manipulation + Grafiken mit R: räumliche Analyse, Regressionsanalyse, Rang-Tail, etc. Hier hilft mir SOLAP, Daten für diese spätere komplexe R-Analyse vorzubereiten.

Warum Python?

1 - Web-Zugriff auf Geodaten -

Ich versuche, ein "cool" Framework Python zu verwenden, wie GeoDjango oder MapFish: große Gemeinschaft in GIS, Open-Source, GeoAlchemy verwenden räumliche zu manipulieren Abfrage/Daten umfassen Visualisierung mit JavaScript-Erweiterungen und OpenLayers usw.

2 - Lokaler Zugriff auf Geodaten in GIS -

ich ein Plugin in QGIS (Open Source GIS) erstellen möchten d zuzugreifen und zu visualisieren Ata und QGIS-Plugin und API = Python.

3 - Automatische Analyse von Daten -

ein Benutzer oder Wissenschaftler führt eine Simulation mit Grid-Computing, und wählen Sie die automatische Analyse (R + ggplot2 + MDX-Abfrage) sie auf diesen Daten ausgeführt werden soll.Mein Ziel ist es, einen synthetischen Bericht der Simulation (Grafik, Tabellendaten, etc.) zu erstellen.

Also, nach der Simulation gehen Daten zu OLAP/SOLAP Cube, und viele Python-Skripte (vom Benutzer erstellt) erhalten Daten mit MDX, manipulieren Daten mit R + RPY2 und schreiben und produzieren coole Ausgabe für den Wissenschaftler auf Doku -Wiki oder eine andere Community-Plattform.

Problem?

1 - Olap4j, die API Kern von Mondrian mit einer externen Komponente zu kommunizieren, ist Java-made:/

2 - SOLAPLAYERS Ajax verwendet Daten zuzugreifen, zu langsam für mich.

3 - SQLAlchemy und GeoAlchemy haben keine Treiberverbindung zu einer mehrdimensionalen Datenbank (OLAP).

* Lösung? *

1 - Py4j Zugriff auf Java-Objekt oder Java-Sammlung in Olap4j mit Python? Schreibe meine eigene Funktion um auf die Java Mapped Collection zuzugreifen? => gefährlich und nicht sehr einfach? ...

2 - XLMA mit Ajax Mondrian Server? Es ist zu langsam.

3 - Schreiben meiner eigenen py-Anschluss zu OLAP Mondrian? => Autsch. Es ist ein harter Weg, denke ich.

Was soll ich tun?

+0

Ich bin auf der Suche Lösung, scheint es i (Java) zu binden olap4j versuchen können, und pythonToJava Aufruf Software wie JPype oder Py4j ... Eine andere Person haben eine andere Antwort oder hier Bemerkung? – reyman64

+0

Lassen Sie wissen, gibt es eine [reine Javascript Pivot-Tabelle] (http://webpivottable.com) kann mit einer intuitiven Benutzeroberfläche und große Leistung XMLA OLAP-Würfel drehen. [Demo] (http://webpivottable.com/demo) und [Dokumente] (http://webpivottable.com/documents) –

Antwort

4

Wie Sie wissen, ist Mondrian eine komplette OLAP-Engine in Java auf einer Datenbank wie MySQL geschrieben. Wenn ich also Ihre Frage verstehe, möchten Sie Mondrian verwenden und sich fragen, wie Sie es mit Python verbinden können.

ich Mondrian in einem .jar verpackt MDX-Abfragen auf der Kommandozeile zu verarbeiten und ein JSON zurückschicken. Python ruft es direkt in der Befehlszeile auf.

Und für den Server verwenden, verpacke ich es in einem Servlet und ich sende MDX mit Ajax. Die Ajax-Aufrufe sind kein großer Aufwand und das ist, warum ich lieber nicht die Notwendigkeit der Kopplung Python und Java sehen als nur mit dem Mondrian-Server kommuniziert.

+0

danke für diese Antwort :) – reyman64

2

Für sehr große Daten Cubes Speicher und Retrieval funktioniert HDF5 Speicher ziemlich gut (h5py oder PyTables für eine Python Schnittstelle). Ihre Anwendung kann dann entweder läuft auf einer Maschine mit einer lokalen Kopie der HDF5 Datenbank oder macht eine Ad-hoc-Server-Lösung (noch in Python).

Ich habe hybride SQL/HDF5-Speicher-Strategien entwickelt, wenn sie benötigt werden, und sie funktionieren ziemlich gut.

Wenn wirklich die MDX-Abfrage-Sprache benötigen:

  • as an ORM (früher Antworten auf Stackoverflow)

  • cubulus (obwohl nur ein Teil der MDX implementiert)

  • führen Sie den OLAP Ihre Wahl als separater Server und kommuniziert mit ihm über ein ad-hoc-Schnittstelle (vielleicht sogar sein XML über hTTP).

+0

Vielleicht HDF5 eine bessere Lösung für die Lagerung, aber ich brauche unbedingt eine Datenbank wie PG + OLAP, mit einfacher Abfragesprache wie MDX oder SQL zum einfachen Manipulieren/Aggregieren/Visualisieren von Dimensionen. Es ist für Anfänger Wissenschaftler Benutzer ... – reyman64

6

Ich weiß nicht, Python, aber ich bin der Autor Mondrian/olap4j.

Wenn Sie py4j zugreifen olap4j, groß verwenden können. Wenn nicht, bedenke definitiv XMLA. Es ist möglicherweise nicht so langsam wie Sie denken (es sei denn Pythons XML-Analyse ist langsam). Das größte Problem ist die Komplexität der Erstellung von SOAP-Anfragen und des Verständnisses der Antworten.

Julian

1

ein bisschen zu vervollständigen, ich habe dieses Python-Paket gerade entdeckt XMLA-Server zuzugreifen: www. Es sagt, dass es mit Mondrian, icCube, MSAS arbeitet.