Запрос OLAP Mondrian (MDX, XMLA) с интерфейсом Python?
На самом деле я использую 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 анализа.
Почему питон?
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 ответа
Как вы знаете, 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.
Я не знаю Python, но я являюсь автором mondrian/olap4j.
Если вы можете использовать py4j для доступа к olap4j, отлично. Если нет, определенно рассмотрим XMLA. Это может быть не так медленно, как вы думаете (если синтаксический анализ Python не является медленным). Самая большая проблема - сложность построения запросов SOAP и понимания ответов.
юлианский
Для хранения и извлечения очень больших кубов данных хранилище HDF5 работает довольно хорошо (h5py или PyTables для интерфейса Python). Затем ваше приложение может работать на компьютере с локальной копией базы данных HDF5 или создать специальное серверное решение (все еще на Python).
При необходимости я разрабатывал гибридные стратегии хранения SQL / HDF5, и они работают довольно хорошо.
Если действительно нужен язык запросов MDX:
Чтобы закончить, я только что обнаружил этот пакет Python для доступа к серверу XMLA: www. Там написано, что он работает с Mondrian, icCube, MSAS.