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

相关文章
|
SQL 人工智能 分布式计算
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略
一文看懂 Cloudera 对 CDH/HDP/CDP 的产品支持策略
|
Dubbo 关系型数据库 MySQL
nacos常见问题之命名空间配置数据上线修改如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
843 1
protobuf实战-----之Mac 安装篇
因为项目的需要,所以,要在mac上安装配置protobuf。其中走了不少弯路。
1920 0
|
关系型数据库 数据挖掘 分布式数据库
数据库+MCP,0编码自主完成数据洞察
本文介绍了一种全新的数据分析方案,结合PolarDB MySQL版与阿里云百炼,搭配MCP工具实现智能数据库分析应用。该方案解决传统数据分析工具高门槛、低效率的问题,通过零SQL操作和一站式部署,助力企业快速挖掘数据价值。方案具备高性能查询、快响应直连加速、高安全保障及易迁移上云等优势,并详细说明了部署资源、应用配置及验证步骤,帮助用户轻松完成实践体验。
|
SQL 存储 分布式计算
Kylin使用心得:从入门到进阶的探索之旅
【5月更文挑战第2天】Apache Kylin是开源大数据分析平台,提供亚秒级OLAP查询。本文深入解析Kylin的工作原理,包括预计算模型Cube、构建过程和查询引擎。常见问题涉及Cube设计、查询性能和资源管理,解决方案涵盖合理设计、性能监控和测试验证。文中还分享了Cube创建的JSON示例,并探讨了Cube构建优化、查询优化、与其他组件集成、监控维护及生产环境问题解决。通过学习和实践,读者能有效提升数据洞察力和决策效率。
704 5
|
人工智能 Kubernetes Cloud Native
Kube Queue:Kubernetes 任务排队的利器
Kube Queue:Kubernetes 任务排队的利器
222038 104
|
12月前
|
存储 人工智能 运维
阿里云向量检索服务 Milvus 版正式商业化
阿里云向量检索服务 Milvus 版正式商业化!
|
消息中间件 存储 传感器
Kafka消息队列原理及应用详解
【5月更文挑战第6天】Apache Kafka是高性能的分布式消息队列,常用于实时数据管道和流应用。它提供高性能、持久化、分布式和可伸缩的消息处理,支持解耦、异步通信和流量控制。Kafka的核心概念包括Broker、Topic、Partition、Producer、Consumer和Consumer Group。其特点是高吞吐、低延迟、数据持久化、分布式架构和容错性。常见应用包括实时数据流处理、日志收集、消息传递和系统间数据交换。
|
12月前
|
算法 编译器 C语言
STL基础介绍
STL基础介绍
587 0
|
Kubernetes 网络安全 容器
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?
在K8S中,有个服务使用service的nodeport进行暴露,发现访问不到如何排查?