Запрос OLAP Mondrian (MDX, XMLA) с помощью интерфейса Python?
Вопрос
На самом деле я использую р + Python с RPY2 для управления данными и ggplot для создания красивой графики.У меня есть некоторые данные в базе данных PostgreSQL, и я использую psycopg2 для запроса данных.
Я начинаю диссертацию, и в будущем мне понадобится OLAP-куб для хранения моих (очень больших) данных моделирования:множественное измерение, запрос агрегации и т. д.
Есть ли какая-либо лучшая или стандартная практика взаимодействия между Python (и я хочу Python + R, без jpivot или какой-либо другой информационной панели в Java) и механизма OLAP, например Мондриан?Я искал в Google любое решение и ничего не нашел.
Я кратко оценил SQLАлхимия, и Django-ORM, но у них нет многомерные выражения или интерфейс XML/A для запроса сервера OLAP (Mondrian или другого)...
Можно ли написать запрос в MDX и с помощью psycopg + ODBC запросить мой OLAP-сервер, и OLAP-сервер даст мне ответ на основе моих данных моделирования (без сопоставления объекта Python, но меня это устраивает)?
Обновление 1:
Почему мне нужно искать информацию о технологии OLAP + Mondrian?
Потому что Университет Лаваля (Отделы GeoSoa + Тьерри Бадар) написали пространственное расширение для OLAP:SOLAP и реализовал это в Mondrian как ГеоМондриан.Это меня интересует, потому что я работаю над пространственным многоагентным моделированием (~= геосимуляция).
Отдел GeoSoa создал компонент на основе Ajax для передачи и визуализации пространственных данных с помощью GeoMondrian:SOLAPLAYERS, который может запрашивать сервер Mondrian с помощью своего сервлета Xlma.
Проблема :вероятно, медленно обрабатывает большие данные, нужен Интернет или Apache 2.Короче говоря, это только для визуализации данных или карты...В моем случае мне нужны необработанные данные для создания собственных манипуляций с данными + графики с помощью R:пространственный анализ, регрессионный анализ, ранговый анализ и т. д.Здесь SOLAP помогает мне подготовить данные для последующего сложного R-анализа.
Почему Питон?
1 – Веб-доступ к пространственным данным –
Я пытаюсь использовать «крутую» структуру Python, например ГеоДжанго или КартаРыбы:большое сообщество ГИС, открытый исходный код, использование ГеоАлхимия для управления пространственными запросами/данными, включая визуализацию с расширениями JavaScript и OpenLayers, и т. д.
2 - Локальный доступ к пространственным данным в ГИС -
Я хочу создать плагин в QGIS (ГИС с открытым исходным кодом) для доступа и визуализации данных, а также плагин QGIS и API = Python.
3 - Автоматический анализ данных -
Пользователь или ученый запускает моделирование с использованием сеточных вычислений и выбирает автоматический анализ (запрос R + ggplot2 + MDX), который он хочет выполнить на основе этих данных.Моя цель здесь — создать синтетический отчет о моделировании (графические, табличные данные и т. д.).
Итак, после моделирования данные передаются в куб OLAP/SOLAP, и многие сценарии Python (созданные пользователем) получают данные с помощью MDX, манипулируют данными с помощью R + RPY2, а также пишут и создают интересные результаты для ученого в doku-wiki или другом месте. сообщество-платформа.
Проблема?
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?=> Ой.Я думаю, это трудный путь.
Что я должен делать?
Решение
Как вы знаете, 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.Возможно, это не так медленно, как вы думаете (если только синтаксический анализ XML в Python не медленный).Самая большая проблема — сложность построения запросов SOAP и понимания ответов.
Джулиан
Для хранения и извлечения очень больших кубов данных достаточно хорошо работает хранилище HDF5 (h5py или PyTables для интерфейса Python).Затем ваше приложение может либо работать на компьютере с локальной копией базы данных HDF5, либо создать специальное серверное решение (все еще на Python).
При необходимости я разрабатывал гибридные стратегии хранения данных SQL/HDF5, и они работают довольно хорошо.
Если действительно нужен язык запросов MDX:
В завершение я только что обнаружил этот пакет Python для доступа к серверу XMLA: www.Там написано, что работает с Mondrian, icCube, MSAS.