Запрос OLAP Mondrian (MDX, XMLA) с интерфейсом Python?

на самом деле я использую R + Python с RPY2 для управления данными и ggplot для создания красивой графики.. У меня есть некоторые данные в базе данных PostgreSQL, и я использую psycopg2 для запроса данных.

Я начинаю диссертацию, и в будущем мне нужен OLAP cube для хранения моих (очень больших) данных моделирования: множественное измерение, запрос агрегации и т. д.

есть ли какая-либо лучшая или стандартная практика для взаимодействия между Python (и я хочу Python + R, нет jpivot или какой-либо другой панели мониторинга в Java) и движок OLAP, как Мондриан? Я искал в Google любое решение, и я ничего не нашел.

я кратко охарактеризовал SQLAlchemy, и Джанго-ОРМ, но у них нет MDX или XML/интерфейс для запроса сервера OLAP (Mondrian или другой) ...

можно ли написать запрос в MDX и с помощью psycopg + ODBC запросить мой сервер OLAP, а сервер OLAP даст мне ответ от мои данные моделирования (нет отображения на объекте Python, но это нормально для меня)?

обновление 1 :

почему мне нужно искать вокруг технологии OLAP + Mondrian ?

, потому что университет Лаваля (geosoa departements + Thierry Badard) написал пространственное расширение для OLAP: SOLAP и реализовал это в Mondrian как GeoMondrian. Это меня интересует, потому что я работаю над spatial multi agent моделирование ( ~= geosimulation).

департамент GeoSoa создал компонент на основе Ajax для связи и визуализации пространственных данных с GeoMondrian: SOLAPLAYERS, который может запрашивать сервер Mondrian с помощью сервлета Xlma.

проблема: вероятно, медленно в больших манипуляциях с данными, нужен интернет или Apache 2. Короче говоря, это только для визуализации данных или карты ... В моем случае мне нужны необработанные данные для собственной обработки данных + графика с R: пространственный анализ, регрессионный анализ, rank-tail и т. д. Здесь SOLAP поможет мне подготовить данные для последующего комплексного анализа R.

Почему Python?

1 - веб-доступ к пространственным данным -

Я пытаюсь использовать" классную " структуру Python, например GeoDjango или MapFish: большое сообщество в ГИС, open-source, use GeoAlchemy чтобы управлять пространственным запросом / данными, включите визуализацию с расширениями JavaScript и OpenLayers, etc.

2 - локальный доступ к пространственным данным в ГИС -

Я хочу создать плагин в QGIS (open source GIS) для доступа и визуализации данных, а также плагин QGIS и API = Python.

3 - автоматический анализ данных -

пользователь или ученый запускает моделирование с помощью grid computing и выбирает автоматический анализ (запрос R + ggplot2 + MDX), который они хотят запустить на этих данных. Моя цель здесь-создать синтетический отчет моделирование (графические, табличные данные и т. д.).

Итак, после моделирования данные идут в OLAP / SOLAP cube, и многие скрипты Python (созданные пользователем) получают данные с MDX, манипулируют данными с R + RPY2, а также пишут и производят классный вывод для ученого на doku-wiki или другой платформе сообщества.

?

1-Olap4j, ядро API Mondrian для связи с внешним компонентом, является Java-made :/

2 - SOLAPLAYERS использует Ajax для доступа к данным, слишком медленно для меня.

3-SQLAlchemy и GeoAlchemy не имеют подключения драйвера к многомерной базе данных (OLAP).

* решение? *

1-Py4j для доступа к объекту Java или коллекции Java в olap4j с Python? Написать свою собственную функцию для доступа к сопоставленной коллекции Java? = > опасно и не очень легко?...

2-XLMA с сервером Ajax Mondrian? Это слишком медленно.

3 - написать мой собственный соединитель с ОЛАПОМ Мондрайном ? => Ой. Думаю, это трудный путь.

Что делать?

4 ответов


Как вы знаете, Mondrian-это полный движок OLAP, написанный на java поверх базы данных, такой как MySQL. Поэтому, если я понимаю ваш вопрос, вы хотите использовать Mondrian и задаться вопросом, как взаимодействовать с Python.

Я использую Mondrian, упакованный в a .jar для обработки запросов MDX в командной строке и отправки обратно JSON. Python вызывает его непосредственно в командной строке.

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]') 

и для использования сервера я упаковываю его в сервлет и отправляю MDX с ajax. Вызовы ajax не являются большими накладные расходы, и именно поэтому я не вижу необходимости связывать Python и Java, а не просто общаться с сервером Mondrian.


Я не знаю python, но я автор mondrian / olap4j.

Если вы можете использовать py4j для доступа к olap4j, отлично. Если нет, обязательно рассмотрите XMLA. Это может быть не так медленно, как вы думаете (если синтаксический анализ XML python не медленный). Самая большая проблема заключается в сложности построения запросов SOAP и понимания ответов.

Юлиан


для хранения и извлечения очень больших кубов данных хранилище HDF5 работает довольно хорошо (h5py или PyTables для интерфейса Python). Затем приложение может работать на компьютере с локальной копией базы данных HDF5 или создавать серверное решение ad-hoc (все еще на Python).

Я разрабатываю гибридные стратегии хранения SQL / HDF5, когда это необходимо, и они работают довольно хорошо.

Если действительно нужен запрос MDX язык:

  • как ОРМ (предыдущие ответы на stackoverflow)

  • cubulus (хотя реализовано только подмножество MDX)

  • запустите OLAP по вашему выбору в качестве отдельного сервера и общайтесь с ним через специальный интерфейс (может быть даже XML через http).


чтобы завершить немного, я только что обнаружил этот пакет python для доступа к серверу XMLA: www. Он говорит, что работает с Mondrian, icCube, MSAS.