Mondrain使用SQL驱动Elasticsearch实现多维数据分析

  • 1、前言

    在线分析系统(OLAP)将已有的数据通过运算公式和转换规则聚合出信息,因此OLAP引擎应该至少能够进行: 

  1. 一个或多个维度对数据进行提取、聚合、合计和预计算;
  2. 一个或多个维度进行逻辑运算、公式等方式的处理; 
  3. 灵活的浏览分析,如一维和多维旋转、交叉表分析、上下钻取等; 

    Elasticsearch(ES)的聚合功能提供了多级分组和统计的能力。聚合类似关系数据库中group by的的功能,在ES中,一次查询中可以使用多维度聚合,这是一个很有用的功能,可以实现如下图所示的功能:

                094511_j9fq_111391.png

(图一)

Mondrian是一个开放源代码的ROLAP服务器,使用java开发的。它实现了xmla和jolap规范,而且自定义了一种使用mdx语言的客户端接口。Mondrian是olap服务器,而不是数据仓库服务器,因此Mondrian的元数据主要包括OLAP建模的元数据,不包括从外部数据源到数据库转换的元数据。也就是说Mondria的元数据仅仅包括了多维逻辑模型,从关系型数据库到多维逻辑模型的映射,存取权限等信息。在功能上,Mondrian支持共享维和成员计算,支持星型模型和雪花模型的功能。

2、SQL4ES数据链接

本例中使用的是SQL4ES,开源项目位于Github,访问地址如下https://github.com/Anchormen/sql4es

Class.forName("nl.anchormen.sql4es.jdbc.ESDriver");
Connection con = DriverManager.getConnection("jdbc:sql4es://localhost:9300/myidx?cluster.name=your-cluster-name");
Statement st = con.createStatement();
// execute a query on mytype within myidx
ResultSet rs = st.executeQuery("SELECT * FROM mytype WHERE something >= 42");
ResultSetMetaData rsmd = rs.getMetaData();
int nrCols = rsmd.getColumnCount();
// get other column information like type
while(rs.next()){
    for(int i=1; i<=nrCols; i++){
        System.out.println(rs.getObject(i));
    }
}
rs.close();
con.close();

项目中提供的JDBC驱动,使用DatabaseMetaData和获取数据表的时候有些问题,需要扩展支持。

3、建立SQL4ES的数据链接

如果对SQL4ES开源代码里的JDBC驱动支持的问题进行了修正,将能够建立JDBC链接,并获取元数据信息

222924_qoPz_111391.png

(图二:创建ES的JDBC连接)

            

            231710_2SD8_111391.png

(图二:测试数据库连接,并使用Druid建立JDBC连接池)

222833_jPDZ_111391.png

(图三:连接池建立成功)

223019_gvlq_111391.png

(图五:自动获取ES数据库表)

223314_lfyV_111391.png

(图六:支持SQL的Group操作,汇总数据)

 

SQL4ES开源项目中的代码支持基本的SQL操作,但不支持JOIN,R3对SQL4ES做了部分扩展,实现了支持多表关联和部分Mondrain中经常使用的CASE WHEN语法。

转载于:https://my.oschina.net/rivues/blog/826790

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值