使用Python接口查询OLAP Mondrian(MDX,XMLA)?

rey*_*n64 8 python olap mdx psycopg2 xmla

实际上我正在使用R + Python和RPY2来操作数据和ggplot来创建漂亮的图形..我在PostgreSQL数据库中有一些数据,而我正在使用psycopg2来查询数据.

我正在开始论文,将来我需要一个OLAP多维数据集来存储我的(非常大的)模拟数据:多维,聚合查询等.

是否有任何最佳或标准的实践来连接Python(我想要Python + R,没有jpivot或Java中的其他仪表板)和像Mondrian这样的OLAP引擎?我在Google上搜索了任何解决方案,但我找不到任何东西.

我简要地评价SQLAlchemy的和Django的ORM,但他们没有MDX或XML/A接口来查询OLAP服务器(蒙德里安或其他)...

是否可以编写一个查询的MDX,并与psycopg + ODBC,查询我的OLAP服务器,OLAP服务器给我从我的模拟数据的应答(Python对象上没有映射,但它的确定对我来说)?

更新1:

为什么我需要搜索OLAP + Mondrian技术?

由于拉瓦尔大学(GeoSoa个省+蒂埃里Badard)写了一个空间延伸到OLAP:SOLAP,并在蒙德里安实施本作GeoMondrian.我感兴趣的是因为我正在研究基于空间多代理的模拟(〜=地理模拟).

所述GeoSoa DEPARTEMENT创建一个基于Ajax组件通信和可视化与GeoMondrian空间数据:SOLAPLAYERS,其可通过其Xlma的servlet查询蒙德里安服务器.

问题:可能是在大数据处理速度慢,需要互联网或Apache 2,简单地说,这只是可视化的数据或地图...就我而言,我需要的原始数据,以使自己的数据处理+与R图形:空间分析,回归分析分析,排序等等.在这里,SOLAP帮助我为后来的复杂R分析准备数据.

为何选择Python?

1 - 对空间数据的Web访问 -

我试图用一个"酷"的Python框架,像GeoDjango内置MapFish:在GIS大社区,开源,使用GeoAlchemy操纵空间查询/数据,包括与JavaScript扩展和可视化的OpenLayers等.

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?=>哎哟.我认为这是一个艰难的方式.

我该怎么办?

小智 6

我不懂python,但我是mondrian/olap4j的作者.

如果你可以使用py4j访问olap4j,那很好.如果没有,一定要考虑XMLA.它可能没有你想象的那么慢(除非python的XML解析很慢).最大的问题是构造SOAP请求和理解响应的复杂性.

朱利安


Bio*_*ize 5

如您所知,Mondrian是一个完整的OLAP引擎,用java编写,在MySQL之类的数据库上.所以如果我理解你的问题,你想使用Mondrian并想知道如何将它与Python接口.

我使用包装在.jar中的Mondrian在命令行上处理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]') 
Run Code Online (Sandbox Code Playgroud)

对于服务器使用,我将其打包在servlet中,然后使用ajax发送MDX.ajax调用不是一个很大的开销,这就是为什么我不认为需要耦合Python和Java而不仅仅是与Mondrian服务器通信.