Запрос OLAP Mondrian (MDX, XMLA) с интерфейсом Python? - PullRequest
8 голосов
/ 25 сентября 2010

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

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

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

Я кратко оценил SQLAlchemy и Django-ORM, но у них нет MDX или XML / A интерфейс для запроса к серверу OLAP (Mondrian или другой) ...

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

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

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

Поскольку Университет Лаваль (Департаменты GeoSoa + Тьерри Бадард) написал пространственное расширение для OLAP: SOLAP иреализовал это в Mondrian как GeoMondrian .Это меня интересует, потому что я работаю над пространственным многоагентным моделированием (~ = геосимуляция).

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

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

Почему Python?

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

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

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

Я хочу создать плагин в QGIS (ГИС с открытым исходным кодом) для доступа и визуализации данных, а также QGISПлагин и API = Python.

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

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

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

Проблема?

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

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

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

* Решение?*

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

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

3 - Написать свой собственный py-разъем для OLAP Mondrian?=> Ой.Я думаю, это трудный путь.

Что мне делать?

Ответы [ 4 ]

6 голосов
/ 01 октября 2010

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

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

Джулиан

5 голосов
/ 10 декабря 2010

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

Я использую Mondrian, упакованный в .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.

2 голосов
/ 27 сентября 2010

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

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

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

  • как ORM (более ранние ответы по stackoverflow)

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

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

1 голос
/ 23 ноября 2012

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

...