2025上半年,最新 AI实践都在这!20+ 应用案例,任听一场议题就值回票价 了解详情
写点什么

Olap4j 1.0:用于在线分析处理(OLAP)服务器的 Java API

  • 2011-07-03
  • 本文字数:3132 字

    阅读完需:约 10 分钟

经过近五年的工作,商业智能厂商 Pentaho 发布了 olap4j 1.0,olap4j 1.0 是一个全新、通用的 Java API,适用于所有在线分析处理( OLAP )服务器。当前版本支持以下几款 OLAP 服务器:

以前业界曾有过提供标准 Java OLAP API 的尝试。Java Community Process 在 2000 年的时候正式提出要有一个标准的 OLAP 接口,以便在替换供应商的时候少更改实现。 JSR 69 ——Java OLAP Interface(JOLAP)当初打算要为能创建、维护 OLAP 数据和元数据的 J2EE 环境提供厂商无关的纯 Java API。但这个规范在 2004 年获批后并没有完成,导致 Java 开发社区仍然没有标准的 Java OLAP API。

InfoQ 有幸采访了 olap4j 规范的领导者、Pentaho 分析的首席架构师和 Mondrian 的创始人 Julian Hyde,以了解 olap4j 的更多内容。

InfoQ:olap4j 1.0 版本的主要功能有哪些?

Olap4j 是一个允许你从 Java 环境里连接 OLAP 数据库、查询元数据、执行 MDX 查询的 API。它是第一个让 Java 程序员连接不同厂商 OLAP 服务器的 Java API。

有两种 olap4j 驱动。一种用于基于 SOAP 的标准 XMLA (XML for Analysis),这个驱动可以和任何 XMLA 服务器通讯,包括 Microsoft SQL Server 分析服务 2005 和 2008 版本、Jedox Palo、SAP/BW。用于 Mondrian 的 olap4j 驱动可以在同一个 JVM 内和 Mondrian 引擎通讯,Mondrian 驱动是 olap4j 的参考实现,而且几年前就已经成为 Mondrian 的主要 API 了。

olap4j API 和两种驱动这几年在生产环境里证明都是很稳定的。

InfoQ:对开发社区来说,有一个用来和 OLAP 服务器交互的开放标准为什么很重要?

开放的标准能为开发人员、集成商和最终用户提供一种选择。没有开放标准的话,如果你想使用供应商 X 的 OLAP 服务器,你就会受到限制,必须使用供应商 X 的 OLAP 客户端。你要是正在构建应用,应用也会受限于供应商 X。使用 olap4j 的话,如果有一款 OLAP 服务器更好、更便宜、更快,或者只是因为某个特定客户已经有该服务器的站点许可了,那你就可以切换到这个服务器上去。而且 OLAP 客户端也会有多种选择。

InfoQ:olap4j 和 JSR 69 有何不同?

在我看来,JSR 69 有很多不足之处。它是一个相当高层次的接口,要求用户理解非常多的元模型(基于公共仓库元模型)和大量的查询模型。查询需要调用 API,而不是在 SQL 或 MDX 之类的语言里用文本的方式去指定。发起 JSR 69 的那些厂商都有既有的实现,我觉得他们要在各种查询构建 API 里找到一种调和的方案,结果却僵持不下。最终,领军 OLAP 服务器市场的 Microsoft 并没有成为规范的贡献者。

大约在同一时间,Microsoft 提出了自己的 OLAP 标准:在 C 和 C++ 环境下用于 OLAP 的 OLE DB,用于 C#和 VB 等.NET 语言的 ADO MD,还有用于 SaaS 的 XMLA(一种 SOAP 方言)。这些标准更加简单,而且由于基于查询语言 MDX,它们更像开发人员用来和关系型数据库交互的 API(ODBC、JDBC)。这些标准已经在各自的环境里得到了普遍的应用,Microsoft 当然没有兴趣去创建一个 Java 标准。

olap4j 为了让 Java 开发人员立即上手,采用了 Java 开发人员所熟悉的 JDBC 模式。比如说,olap4j 里创建连接、准备和执行语句的代码看起来和 JDBC 里的非常像。所不同的是,查询语言是 MDX 而非 SQL,而且结果是个多维的 CellSet,而不是由行和列组成的 ResultSet。

olap4j 差不多可以说是 JDBC 的扩展,实际上这意味着你可以为 olap4j 连接使用连接池、目录服务等基础设施,就像供 JDBC 连接使用的一样。

InfoQ:这些 MDX 查询是如何生成的?

在 JDBC 应用里 SQL 通常是硬编码的,相反,OLAP 的目的是进行交互式的数据探索,所以查询需要动态生成。Olap4j 提供了一个查询模型,可以一步一步构建查询,然后转换成 MDX。olap4j 和以查询模型为中心的 API(比如 JSR-69 和 Oracle 的 OLAP API)相比,最关键的区别在于 olap4j 里查询模型是可选的。如果你是应用开发人员,你的应用总需要展示同样的图表或数据表格,那你可以手工编写 MDX 查询;如果你是 OLAP 工具开发人员,你就可以使用 olap4j 的查询模型或是构建自己的查询模型。虽然我们已经到了 1.0 版本,但 olap4j 的查询模型仍然在继续进行。好消息是它并不是 API 的核心部分,而且它的演进不会破坏 API 的其他部分。

这样做的结果是 olap4j 要比 JSR-69 和 Oracle 的 OLAP API 更小、更简单。对学习 API 的应用开发人员,以及试图实现 API 的服务器和驱动的开发人员来说,这可是个好消息。

InfoQ:到目前为止,JOLAP 已经成为很多其他工作的基础了。比如 Hyperion 的 XMLA 实现就使用了基于 JOLAP 规范的 Java API。但规范本身并没有真正成为这样的标准。你打算去复兴 JOLAP 规范本身吗?

我们不打算那么做,原因上面已经说过了。不过 olap4j 采用了 XMLA 的很多内容,XMLA 是目前最重要的 OLAP 规范。两个 API 的元数据非常像,查询语言 MDX 则完全相同。主要区别是,在 Java 环境里 olap4j 要比 XMLA 好用的多。而且 olap4j 在很多情况下都比 XMLA 有效率,因为驱动能使用缓存,或是使用比 XML over HTTP 更有效的协议。

InfoQ:你打算把规范提交给 JCP 么?还是想让它继续作为独立的规范和流程发展下去?

我们希望 olap4j 能像 JDBC 那样被看作是 Java 运行时库的标准部分。但我们现在还不打算把它提交到 JCP。JSR-69 的失败有一个教训,就是市场要比 JCP 的结果更为重要。我们希望越来越多的服务器能添加 olap4j 驱动,olap4j 也能随之成为市场的生力军。服务器厂商看到 olap4j 的好处之后,希望他们会支持我们在 JCP 里提议 olap4j。

InfoQ:olap4j 和其他 Java OLAP 接口的主要区别有哪些?像 Oracle 的 OLAP Java API。

首先,包括 Oracle API 在内的其他 API 都不是基于 MDX 查询语言的。相反,查询都是通过编程方式创建的,而且构建查询的 API 往往因厂商的不同而不同。

其次,其他 API 会让你受限于特定的厂商。

大多数 OLAP 服务器近来都实现了 XMLA。这需要继续做两件重要的事情。首先就是以用于 XMLA 的开源 olap4j 驱动为起点,创建用于这些服务器的 olap4j 驱动。第二,这些服务器实现 XMLA 实际上意味着他们要实现 MDX 语言。所以,为这些服务器实现原生的 olap4j 驱动应该是有可能的,这要比基于 XMLA 的驱动更有效率。

InfoQ:有计划在 olap4j 以后的版本里对其他 OLAP 服务器提供驱动支持么?

我们不能保证支持所有特定的服务器,但作为开源项目,我们希望社区能做出有价值的贡献。在过去的一年里,其他人已经实现了 SAP/BW 和 Palo 的驱动;我希望在接下来的几个月里能有 Oracle/Essbase 的驱动。

InfoQ:关于 olap4j,开发社区还有应该知道的信息么?

olap4j 1.0 里的核心 API 是稳定的。我们保证 API 以后演进的时候能向后兼容。但我们不会止步于 olap4j 1.0。我们将以兼容的方式增强核心 API,在以后的版本里我们还会添加很多内容。

我们想扩展、改进查询模型。前面已经说过,查询模型是一个生成 MDX 的客户端库,所以修改起来非常容易,也不会修改 API 里查询元数据、执行查询的核心部分。

有一个单元格回写的实验工具。它允许“假设”场景和应用的规划。它在 olap4j 里只是一个可选的功能,但我们希望 Palo 和 Mondrian 至少要实现它。

还有一个实验工具,在服务器上的数据发生变化时能立即接收“推”过来的通知。想象一下,Web 客户端上单元格的值在你眼前发生变化,还会简单地改变颜色以提醒你有变更。

由于 olap4j 是按照开放流程进行开发的,贡献者来自不同的项目和公司,所以我们可以期待在规范的后续版本里能出现更多的好点子。

Olap4j 是由公司和开源项目联合开发的。它是一个开放的规范,遵循Eclipse 公共许可( EPL )。

查看英文原文: Olap4j 1.0: a Java API for OLAP Servers

2011-07-03 02:517997
用户头像

发布了 151 篇内容, 共 65.7 次阅读, 收获喜欢 18 次。

关注

评论

发布
暂无评论
发现更多内容

实践,制作一个高扩展、可视化低代码前端,详实、完整

悠闲的水

前端 低代码 前端框架 低代码开发 低代码平台

WorkPlus|可定制、可扩展的私有化即时通讯办公平台

BeeWorks

ListView Item多布局的实现

芯动大师

ListView item QQ界面

openEuler加入RISC-V Landscape

openEuler

Linux 操作系统 openEuler risc-v

工厂模式进阶用法,如何动态选择对象?

JAVA旭阳

Java 设计模式

数字图像处理Matlab函数全汇总

timerring

图像处理

PyTorch深度学习实战 | 计算机视觉

TiAmo

深度学习 计算机视觉

企业内部即时通讯软件,提供安全的组织管理和办公协作方式

BeeWorks

【深度挖掘RocketMQ底层源码】「底层问题分析系列」深度挖掘RocketMQ底层那些导致消息丢失的汇总盘点透析([REJECTREQUEST]system busy, start flow control for a while)

码界西柚

RocketMQ OOM 消息队列 3月日更

研发提效利器:聊聊mock服务化

老张

Mockito 服务化 Mock

API 网关日志的价值,你了解多少?

API7.ai 技术团队

让AI上车,车企如何借势2023上海国际车展硬核出圈

极客天地

OpenAI竞争对手Anthropic融资:1融资易估值难2背后谷歌云3侧重安全

B Impact

电商平台的商品价格管理的产品设计

产品海豚湾

产品设计 SaaS 商品管理 电商 产品分析

【3.3-3.10】写作社区优秀技术博文一览

InfoQ写作社区官方

热门活动 优质创作周报

适配PyTorch FX,OneFlow让量化感知训练更简单

OneFlow

人工智能 深度学习

周六直播|StarRocks 参与数据湖架构峰会,揭秘最新湖仓分析新范式!

StarRocks

数据库 大数据

从 1 秒到 10 毫秒!在 APISIX 中减少 Prometheus 请求阻塞

API7.ai 技术团队

链上双币拆分理财dapp系统开发功能逻辑分析(智能合约编写)

开发v-hkkf5566

CleanMyMac X4.20免费版Mac系统垃圾清理工具

茶色酒

CleanMyMac X

微服务为什么要用到 API 网关?

API7.ai 技术团队

终于说有人清楚了BI仪表板和大屏的区别

搞大屏的小北

数据分析 数据可视化 数据大屏 仪表板 可视化展示

模块八作业

张贺

架构训练营

Swift 里 的 Struct 和 Class

刿刀

前端开发框架React技术如何与小程序结合,进行页面构建

兴科Sinco

小程序 taro 前端开发 前端框架 React Native

彻底搞懂贝叶斯的本质

侠之大者

机器学习 贝叶斯公式 概率论

从新手小白到运维大咖,SysOM 多场景宕机实例解析 | 龙蜥技术

OpenAnolis小助手

运维 操作系统 服务器 龙蜥技术 SysOM

AI for Good | 从女性力量,到AI公平

澳鹏Appen

人工智能

原因码与ACK--MQTT 5.0新特性

EMQ映云科技

物联网 IoT mqtt 企业号 3 月 PK 榜 原因码

Olap4j 1.0:用于在线分析处理(OLAP)服务器的Java API_Java_Charles Humble_InfoQ精选文章