9
votes

Query OLAP Mondrian (MDX, XMLA) avec une interface Python?

En fait, j'utilise R + Python avec RPY2 pour manipuler des données et ggplot Pour créer de beaux graphiques .. J'ai des données dans une base de données PostgreSQL et j'utilise psycopg2 pour interroger des données.

Je commence une thèse, et à l'avenir, j'ai besoin d'un OLAP Cube pour stocker mes données de simulation (très gros): multiples dimensions, requêtes d'agrégation, etc.

Y a-t-il des meilleures ou des pratiques standard pour interfaçage entre Python (et je veux Python + R, pas de jpivot ou un autre tableau de bord en Java) et un moteur OLAP comme Mondrian ? J'ai cherché sur Google pour toute solution et je n'ai rien trouvé.

J'ai brièvement évalué sqlalchemy , et django-orm, mais ils n'ont pas MDX ou XML / A pour interroger un serveur OLAP (Mondrian ou autre) ...

est-il possible d'écrire une requête dans MDX et, avec Psycopg + ODBC, la requête mon serveur OLAP et le serveur OLAP me donnant une réponse de mes données de simulation (aucune cartographie sur l'objet Python, mais c'est bon pour moi)?

Mise à jour 1:

Pourquoi dois-je rechercher autour de la technologie OLAP + Mondrian?

parce que University of Laval (départements de Geosoa + Thierry Badard) a écrit un spatial Extension de OLAP: Solap et mis en œuvre en Mondrian comme Geomondrian . Cela m'intéresse parce que je travaille sur la simulation multi-agents spatiaux (~ = geosimulation).

Le département Geosoa a créé un composant basé sur Ajax pour communiquer et visualiser des données spatiales avec Geomondrian: SolApplayers, qui peut interroger un serveur Mondrian par son servlet XLMA.

Problème: Probablement lent dans la manipulation de la Big Data, besoin d'Internet ou d'Apache 2. Brièvement, il est seulement de visualiser des données ou de la carte ... dans mon cas, j'ai besoin de données brutes pour rendre mon propre manipulation de données + graphiques avec R: spatial Analyse, analyse de régression, queue de rang, etc. Ici, Solap m'aidez à préparer des données pour cette analyse complexe complexe ultérieure.

pourquoi python?

1 - Accès Web aux données spatiales -

J'essaie d'utiliser une structure "cool" Python, comme géodjango ou Cartefish : Big Communauté en SIG, Open-Source, Utilisez Geoalchemy pour manipuler la requête / données spatiales, inclure la visualisation avec des extensions JavaScript et Openlayers , etc.

2 - Accès local aux données spatiales dans SIG -

Je souhaite créer un plugin dans QGIS (Open Source SIG) pour accéder et visualiser des données, et le plug-in QGIS et API = Python.

3 - Analyse automatique des données -

Un utilisateur ou un scientifique exécute une simulation avec l'informatique de la grille et choisissez Analyse automatique (R + GGPLot2 + MDX requêtes), ils souhaitent s'exécuter sur ces données. Mon objectif ici est de créer un rapport synthétique de la simulation (graphique, données tabulaires, etc.).

Donc, après la simulation, les données vont à OLAP / Solap Cube, et de nombreux scripts Python (créés par l'utilisateur) obtiennent des données avec MDX, manipulent des données avec R + RPY2 et écrivez et produisent une sortie cool pour le scientifique sur DOKU- wiki ou une autre plate-forme communautaire.

problème?

1 - OLAP4J, le noyau API de Mondrian pour communiquer avec un composant externe, est fabriqué Java: /

2 - Solaplayers utilise AJAX pour accéder aux données, trop lent pour moi.

3 - SQLalchemy et Geoalchemy n'ont aucune connexion de pilote avec une base de données multidimensionnelle (OLAP).

* solution? *

1 - PY4J pour accéder à la collection Java Object ou Java à OLAP4J avec Python? Ecrivez ma propre fonction pour accéder à la collection mappée Java? => dangereux et pas très facile? ...

2 - XLMA avec Ajax Mondrian Server? C'est trop lent.

3 - Écrivez mon propre connecteur py à Olap Mondrian? => Aïe. C'est un moyen difficile, je pense.

Que dois-je faire?


2 commentaires

Je cherche une solution, il semble que je puisse essayer de lier des logiciels d'appel OLAP4J (Java) et Pythontojava comme JPYPY ou PY4J ... une autre personne a une autre réponse ou remarque ici?


Tout simplement vous faire savoir, il y a un PURE JavaScript Pivot Table peut pivoter des cubes OLAP XMLA avec une interface utilisateur intuitive et une grande performance. Demo et Documents


4 Réponses :


2
votes

Pour de très grandes cubes de données de stockage et de récupération, le stockage HDF5 fonctionne assez bien (H5py ou Pytables pour une interface Python). Votre application peut alors être exécutée sur une machine avec une copie locale de la base de données HDF5 ou créer une solution de serveur Ad-hoc (toujours en Python).

J'ai conçu des stratégies de stockage hybrides SQL / HDF5 en cas de besoin et ils sont plutôt bien performants.

Si vraiment besoin du langage de requête MDX:

  • en tant qu'OR (réponses antérieures sur Stackoverflow) < / p>

  • cubulus (bien qu'un sous-ensemble de MDX soit implémenté)

  • Exécutez l'OLAP de votre choix en tant que serveur distinct et communiquez avec celui-ci via une interface ad-hoc (peut même être XML via HTTP).


1 commentaires

Peut-être que HDF5 est une meilleure solution pour le stockage, mais j'ai besoin d'une base de données comme PG + OLAP, avec des langages de requête simples tels que MDX ou SQL pour manipuler / agréger / visualiser facilement la dimension. C'est pour les utilisateurs de scientifiques débutants ...



6
votes

Je ne sais pas python, mais je suis auteur de Mondrian / Olap4j.

Si vous pouvez utiliser PY4J pour accéder à OLAP4J, génial. Sinon, considérez certainement XMLA. Ce n'est peut-être pas aussi lent que vous le pensez (sauf si l'analyse XML de Python n'est lente). Le plus gros problème est la complexité de la construction de demandes de savon et de comprendre les réponses.

Julian


0 commentaires

5
votes

Comme vous le savez, Mondrian est un moteur OLAP complet écrit en Java au-dessus d'une base de données comme MySQL. Donc, si je comprends votre question, vous voulez utiliser Mondrian et me demander comment l'interfacer avec Python.

J'utilise Mondrian emballé dans un .jar pour traiter les requêtes MDX sur la ligne de commande et renvoyer un JSON. Python l'appelle directement dans la ligne de commande. xxx

et pour l'utilisation du serveur, je l'emballette dans un servlet et j'envoie MDX avec Ajax. Les appels AJAX ne sont pas un grand surcharge et c'est pourquoi je ne vois pas la nécessité de coupler Python et Java plutôt que de simplement communiquer avec le serveur Mondrian.


0 commentaires

1
votes

Pour compléter un peu, je viens de découvrir ce paquet Python pour accéder à XMLA Server: www . Il dit que cela fonctionne avec Mondrian, Iccube, MSAS.


0 commentaires