您现在的位置是:首页 > 文章详情

Mondrain支持kylin问题解决

日期:2018-07-09点击:433

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 " : ", ";

原文链接:https://yq.aliyun.com/articles/609439
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章