Mondrain支持kylin问题解决
Mondrain支持kylin问题解决
Mdx
select
{[MEASURES].[UNITPRICE],[MEASURES].[NUMBER]} on columns,
{[CUSTOMER].[GENDER].members} on rows
from saleinfo
问题
问题1: mondrian转换过来的sql kylin不支持:Cartesian Join is not supported. while executing SQL: "select "CUSTOMER"."GENDER" as "c0", sum("SALE"."UNITPRICE") as "m0", sum("SALE"."NUMBER") as "m1" from "SALE" as "SALE", "CUSTOMER" as "CUSTOMER" where "SALE"."CUSID" = "CUSTOMER"."CUSID" group by "CUSTOMER"."GENDER"
不支持笛卡儿积的写法=》对应源码修改1,2,3
问题2:No realization found for OLAPContext, MODEL_UNMATCHED_JOIN, rel#993:OLAPTableScan.OLAP.[](table=[PUBLIC, SALE],ctx=,fields=[0, 1, 2, 3, 4, 5, 6, 7]), JoinDesc [type=INNER, primary_key=[CUSID], foreign_key=[CUSID]] while executing SQL: "select "CUSTOMER"."GENDER" as "c0", sum("SALE"."UNITPRICE") as "m0", sum("SALE"."NUMBER") as "m1" from "SALE" as "SALE" join "CUSTOMER" as "CUSTOMER" on "SALE"."CUSID" = "CUSTOMER"."CUSID" group by "CUSTOMER"."GENDER
源码修改1,2,3执行完之后,转换出的sql 中join 没有带left,kylin不支持。对应解决方法是修改4。
源码修改
1.Dialect.java的枚举类型DatabaseProduct中新增KYLIN.
2.JdbcDialectImpl.java的getProduct中新增对kyin的支持:else if (upperProductName.equals("KYLIN")){
return DatabaseProduct.KYLIN;
}
3.新增KylinDialect.java类
/**
* @author wangzhou
* @date 2018年7月10日
* 增加kylin支持
*/
package mondrian.spi.impl;
import java.sql.*;
import mondrian.spi.*;
public class KylinDialect extends JdbcDialectImpl {
public static final JdbcDialectFactory FACTORY;
public KylinDialect(final Connection connection) throws SQLException {
super(connection);
}
public boolean allowsCountDistinct() {
return false;
}
public boolean allowsJoinOn() {
return true;
}
static {
FACTORY = new JdbcDialectFactory(KylinDialect.class, Dialect.DatabaseProduct.KYLIN) {
protected boolean acceptsConnection(final Connection connection) {
return super.acceptsConnection(connection);
}
};
}
}
4.修改SqlQuery.java的toBuffer()中的三目运算String fromSep = joinCount > 0 ? " join " : ", ";修改为String fromSep = joinCount > 0 ? " left join " : ", ";
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
用Tensorflow搭建预测磁盘性能的机器学习模型
前言:这篇文章的内容是去年上家公司参加部门code hackthon活动上运用了一些简单的Tensorflow机器学习模型,做的一个预测磁盘性能的小工具。因为和现在所做的行业和工作内容有些一定差距,就不详述应用的详细场景。google今年的开发者大会上定位所有的方向主攻“AI First”,相信机器学习将来会越来越多的提高大家的工作效率,也希望以后能用机器学习来给业务赋能。 背景:企业级存储器在目前应用在众多银行和大企业中,目前主流的存储,底层介质依然还是性价比高的磁盘(价格便宜,容量大),不过由于flash的强势崛起,新的中高端存储会越来越多的使用flash做为其存储介质。在实际使用中,不同企业在存储数据的时候应用场景不一样,有些是频繁,小批量;有些是单次大文件;有些是无规律的写入大小数据。不同存储在这些应用场景下,性能差距会比较大。这会导致销售人员在前线了解到需求后,需要测试部门模拟相应的场景,来给出存储的具体性能数据,这种场景可能需要花费一周才能拿到性能数据。 目标:收集足够多的磁盘性能原始数据,选择合适的机器学习模型来仿真性能数据。以后销售人员在评估性能的时候,只需要将数据输入...
- 下一篇
guava-retrying基于guava的重试模块
简介 The guava-retrying module provides a general purpose method for retrying arbitrary Java code with specific stop, retry, and exception handling capabilities that are enhanced by Guava's predicate matching. maven依赖 <dependency> <groupId>com.github.rholder</groupId> <artifactId>guava-retrying</artifactId> <version>2.0.0</version> </dependency> 使用说明 简单的demo Callable<Boolean> callable = new Callable<Boolean>() { public Boolean call() thro...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装