繁体   English   中英

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

[英]Query OLAP Mondrian (MDX, XMLA) with a Python interface?

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

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

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

我简要评估了SQLAlchemy和Django-ORM,但他们没有MDX或XML / A接口来查询OLAP服务器(Mondrian或其他)......

是否可以在MDX中编写查询,并使用psycopg + ODBC查询我的OLAP服务器,OLAP服务器从我的模拟数据中给出答案(没有Python对象的映射,但对我来说没问题)?

更新1:

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

因为拉瓦尔大学 (GeoSoa部门+ Thierry Badard)为OLAP写了一个空间扩展:SOLAP,并在Mondrian中将其作为GeoMondrian实现 我感兴趣的是因为我正在研究基于空间多代理的模拟(〜=地理模拟)。

GeoSoa部门创建了一个基于Ajax的组件,用于与GeoMondrian:SOLAPLAYERS进行通信和可视化空间数据,SOLAPLAYERS可以通过其Xlma servlet查询Mondrian服务器。

问题:大数据操作可能比较慢,需要Internet或Apache 2.简单来说,它只是可视化数据或映射...在我的情况下,我需要原始数据来制作我自己的数据操作+图形与R:空间分析,回归分析,排序等等。在这里,SOLAP帮助我为后来的复杂R分析准备数据。

为何选择Python?

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

我正在尝试使用“酷”的Python框架,如GeoDjangoMapFish :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? =>哎哟。 我认为这是一个艰难的方式。

我该怎么办?

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

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

朱利安

如您所知,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]') 

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

对于非常大的数据立方体存储和检索,HDF5存储工作相当好(用于Python接口的h5py或PyTables)。 然后,您的应用程序可以在具有HDF5数据库本地副本的计算机上运行,​​也可以制作ad-hoc服务器解决方案(仍在Python中)。

我一直在设计混合SQL / HDF5存储策略,并且表现相当不错。

如果真的需要MDX查询语言:

  • 作为ORM (stackoverflow的早期答案)

  • cubulus (尽管只实现了MDX的一个子集)

  • 将您选择的OLAP作为单独的服务器运行,并通过ad-hoc接口与其进行通信(甚至可能是通过http的XML)。

为了完成一点,我刚刚发现了这个python包来访问XMLA服务器: www 它说它与Mondrian,icCube,MSAS合作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM