使用Python接口查询OLAP Mondrian(MDX,XMLA)?
题
其实我正在使用 右 + Python 使用 RPY2 操作数据,使用 ggplot 创建漂亮的图形。我在 PostgreSQL 数据库中有一些数据,我正在使用 psycopg2 来查询数据。
我正在开始一篇论文,将来我需要一个 联机分析处理立方体 存储我的(非常大的)模拟数据:多维度、聚合查询等
Python(我想要 Python + R,没有 jpivot 或 Java 中的其他一些仪表板)和 OLAP 引擎(如 蒙德里安?我在谷歌上搜索任何解决方案,但没有找到任何东西。
我简单评价过 SQL炼金术, 和 Django-ORM,但他们没有 MDX 或 XML/A 接口来查询 OLAP 服务器(Mondrian 或其他)...
是否可以在 MDX 中编写一个查询,并使用 psycopg + ODBC 查询我的 OLAP 服务器,然后 OLAP 服务器从我的模拟数据中给出答案(Python 对象上没有映射,但对我来说没问题)?
更新1:
为什么我需要搜索 OLAP + Mondrian 技术?
因为 拉瓦尔大学 (GeoSoa 部门 + Thierry Badard)编写了 OLAP 的空间扩展:SOLAP,并在 Mondrian 中将其实现为 吉奥·蒙德里安。这让我感兴趣,因为我正在研究基于空间多代理的模拟(〜=地理模拟)。
GeoSoa 部门创建了一个基于 Ajax 的组件,用于与 GeoMondrian 通信和可视化空间数据:SOLAPLAYERS,它可以通过其 Xlma servlet 查询 Mondrian 服务器。
问题 :大数据处理可能很慢,需要互联网或 Apache 2。简而言之,它只是将数据可视化或绘制地图......就我而言,我需要原始数据来使用 R 制作自己的数据操作+图形:空间分析、回归分析、Rank-tail等在这里,SOLAP 帮助我为后面的复杂 R 分析准备数据。
为什么选择Python?
1 - Web 访问空间数据 -
我正在尝试使用一个“酷”的Python框架,比如 地理Django 或者 地图鱼: :GIS 大社区、开源、使用 地质炼金术 操作空间查询/数据,包括使用 JavaScript 扩展进行可视化以及 开放层, , ETC。
2 - 本地访问 GIS 中的空间数据 -
我想在QGIS(开源GIS)中创建一个插件来访问和可视化数据,并且QGIS插件和API = Python。
3 - 数据自动分析 -
用户或科学家使用网格计算运行模拟,并选择他们想要对此数据运行的自动分析(R + ggplot2 + MDX 查询)。我的目标是创建模拟的综合报告(图形、表格数据等)。
因此,在模拟之后,数据进入 OLAP/SOLAP 立方体,许多 Python 脚本(由用户创建)使用 MDX 获取数据,使用 R + RPY2 操作数据,并在 doku-wiki 或其他平台上为科学家编写和生成很酷的输出社区平台。
问题?
1 - Olap4j,Mondrian 与外部组件通信的 API 核心,是 Java 制造的:/
2 - SOLAPLAYERS 使用 Ajax 访问数据,对我来说太慢了。
3 - SQLAlchemy 和 GeoAlchemy 没有与多维数据库 (OLAP) 的驱动程序连接。
* 解决方案?*
1 - Py4j 使用 Python 访问 olap4j 中的 Java 对象或 Java 集合?编写自己的函数来访问 Java 映射集合?=> 危险而且不太容易?...
2 - XLMA 与 Ajax Mondrian 服务器?太慢了。
3 - 将我自己的 py 连接器写入 OLAP Mondrian ?=> 哎呀。我想,这是一条艰难的路。
我应该怎么办?
解决方案
如你所知,蒙德里安是用Java编写的,如MySQL数据库之上的完整的OLAP引擎。所以,如果我理解你的问题,你想用蒙德里安,不知如何与Python接口吧。
我用蒙德里安包装在一个.jar到过程MDX查询命令行上并发送回一个JSON。蟒蛇直接在命令行调用它。
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]')
和服务器使用,我在servlet打包和我送MDX与AJAX。 Ajax调用不是一个大的开销,这就是为什么我没有看到耦合Python和Java,而不是仅仅与蒙德里安服务器通信的需要。
其他提示
我不知道蟒蛇,但我的蒙德里安/ olap4j作者。
如果您可以使用py4j访问olap4j,太好了。如果没有,肯定会考虑XMLA。你觉得(除非Python的XML解析速度很慢)它可能不是一样慢。最大的问题是构造SOAP请求和理解了响应的复杂性。
儒略
要完成了一下,我刚刚发现这个Python包访问XMLA服务器: WWW 。它说,它的工作与蒙德里安,icCube,MSAS。