9

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

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

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

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

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

更新 1:

为什么我需要围绕 OLAP + Mondrian 技术进行搜索?

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

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

问题:大数据操作可能很慢,需要 Internet 或 Apache 2。简而言之,它只是可视化数据或地图......在我的情况下,我需要原始数据来制作我自己的数据操作 + 用 R 绘制的图形:空间分析,回归分析,rank-tail 等。在这里,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 - 为 OLAP Mondrian 编写我自己的 py 连接器?=> 哎哟。我认为这是一条艰难的道路。

我应该怎么办?

4

4 回答 4

6

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

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

朱利安

于 2010-09-30T20:01:41.730 回答
5

如您所知,Mondrian 是在 MySQL 等数据库之上用 java 编写的完整 OLAP 引擎。因此,如果我理解您的问题,您想使用 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 服务器通信。

于 2010-12-09T21:22:09.307 回答
2

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

我一直在需要时设计混合 SQL / HDF5 存储策略,它们的性能相当不错。

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

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

  • cubulus(虽然只实现了 MDX 的一个子集)

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

于 2010-09-27T08:02:24.737 回答
1

为了完成一点,我刚刚发现了这个用于访问 XMLA 服务器的 python 包:www。它说它正在与蒙德里安、icCube、MSAS 合作。

于 2012-11-23T08:57:50.437 回答