【问题标题】:Query OLAP Mondrian (MDX, XMLA) with a Python interface?使用 Python 接口查询 OLAP Mondrian(MDX、XMLA)?
【发布时间】:2011-04-17 03:10:04
【问题描述】:

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

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

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

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

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

更新 1:

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

因为University of Laval(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 - Mondrian 与外部组件通信的 API 核心 Olap4j 是 Java 制造的:/

2 - SOLAPLAYERS 使用 Ajax 访问数据,对我来说太慢了。

3 - SQLAlchemy 和 GeoAlchemy 没有与多维数据库 (OLAP) 的驱动程序连接。

* 解决方案? *

1 - Py4j 使用 Python 访问 olap4j 中的 Java 对象或 Java 集合?编写我自己的函数来访问 Java 映射集合? => 危险且不容易?...

2 - XLMA 与 Ajax Mondrian 服务器?太慢了。

3 - 为 OLAP Mondrian 编写我自己的 py 连接器? => 哎哟。我认为这是一条艰难的道路。

我该怎么办?

【问题讨论】:

  • 我正在寻找解决方案,看来我可以尝试绑定 olap4j (java) 和 pythonToJava 调用软件,如 JPype 或 Py4j ...其他人在这里有其他答案或备注?
  • 只是让您知道,有一个pure javascript pivot table 可以旋转 XMLA OLAP 多维数据集,具有直观的 UI 和出色的性能。 demodocuments

标签: python mdx olap psycopg2 xmla


【解决方案1】:

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

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

朱利安

【讨论】:

    【解决方案2】:

    如您所知,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 服务器通信。

    【讨论】:

      【解决方案3】:

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

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

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

      • as an ORM(stackoverflow 上的早期答案)

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

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

      【讨论】:

      • 也许 HDF5 是一个更好的存储解决方案,但我绝对需要一个像 PG + OLAP 这样的数据库,使用像 MDX 或 SQL 这样的简单查询语言来轻松地操作/聚合/可视化维度。它适用于初学者科学家用户...
      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多