其实我正在使用 + 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请求和理解了响应的复杂性。

儒略

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

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

如果确实需要 MDX 查询语言:

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

  • 立方体 (虽然只实现了 MDX 的一个子集)

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

要完成了一下,我刚刚发现这个Python包访问XMLA服务器: WWW 。它说,它的工作与蒙德里安,icCube,MSAS。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top