Mondrain支持kylin问题解决

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

相关文章
|
2月前
|
存储 SQL 分布式数据库
Kylin学习总结
Kylin学习总结
50 1
|
1月前
|
SQL 消息中间件 Java
兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)
通过兼容 Connector 插件,Apache Doris 能够支持 Trino/Presto 可对接的所有数据源,而无需改动 Doris 的内核代码。
兼容Trino Connector,扩展Apache Doris数据源接入能力|Lakehouse 使用手册(四)
|
2月前
|
存储 数据挖掘 Apache
Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
如何在 Docker 环境下快速搭建 Apache Doris + Apache Iceberg 测试 & 演示环境,并展示各功能的使用操作
Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
|
4月前
|
SQL 缓存 关系型数据库
ClickHouse(19)ClickHouse集成Hive表引擎详细解析
Hive引擎允许对HDFS Hive表执行 `SELECT` 查询。目前它支持如下输入格式: -文本:只支持简单的标量列类型,除了 `Binary` - ORC:支持简单的标量列类型,除了`char`; 只支持 `array` 这样的复杂类型 - Parquet:支持所有简单标量列类型;只支持 `array` 这样的复杂类型
192 1
|
5月前
|
存储 SQL 分布式计算
KIP-5:Apache Kylin深度集成Hudi
KIP-5:Apache Kylin深度集成Hudi
58 0
|
SQL 分布式计算 监控
Kylin 是什么?
Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。
223 1
Kylin 是什么?
|
SQL 存储 分布式计算
Presto - 简介(一)
Presto - 简介(一)
351 0
Presto - 简介(一)
|
SQL 消息中间件 分布式计算
Atlas 2.1.0 实践(3)—— Atlas集成HIve
Atlas 2.1.0 实践(3)—— Atlas集成HIve
641 0
Atlas 2.1.0 实践(3)—— Atlas集成HIve
|
SQL 存储 资源调度
Presto - 简介(二)
Presto - 简介(二)
334 0
|
SQL 分布式计算 Java
Delta Lake 0.5.0 正式发布,支持包括 Hive/Presto 等多种查询引擎
Delta Lake 0.5.0 于2019年12月13日正式发布,这个版本支持多种查询引擎查询 Delta Lake 的数据,比如常见的 Hive、Presto 查询引擎。并发操作得到改进。
Delta Lake 0.5.0 正式发布,支持包括 Hive/Presto 等多种查询引擎