Запрос 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 язык:
чтобы завершить немного, я только что обнаружил этот пакет python для доступа к серверу XMLA: www. Он говорит, что работает с Mondrian, icCube, MSAS.