Kyligence AI 服务 - 让大模型完成准确、可靠的数值计算和回答! 立即了解更多
AI 数智助理
Kyligence Zen Kyligence Zen
Kyligence Enterprise Kyligence Enterprise
Kyligence Turbo Kyligence Turbo
指标平台解决方案
OLAP 解决方案
行业解决方案
客户总览
金融
零售
制造
医药
其他
云平台
BI
寻求合作
资源
Kyligence Enterprise
Kyligence Zen
培训
Apache Kylin
Byzer
Gluten
博客
关于
市场活动
在 7 月 12 日的 Kylin Data Summit 上,来自丁香园的周天鹏获得“2019 最佳 Apache Kylin 社区贡献个人奖”,热心的天鹏同学修复了很多 Kylin 与 Tableau 集成的问题。社区小伙伴经常会问起『Tableau Generic JDBC 可以连 Kylin 吗』,终于,天鹏带来了下文为大家揭晓答案。
喜大普奔~ 喜大普奔~ 都 9102 年了,Tableau(2018.3及以后版本)终于能用自带的 Generic JDBC 驱动连接 Kylin 了。
提前声明,这些对 JDBC 驱动的不断贡献均来自于社区小伙伴。本人只是整理一下不同版本 Kylin JDBC 驱动能和 Tableau 能擦出怎样的火花,仅此而已。
Tableau 官方明确声明对 JDBC 驱动仅做了有限的支持,基本就是这个水平......
虽然支持了通用 JDBC 驱动,能不能用那可就看你的驱动了。想打印驱动的 Debug 日志信息?不好意思,不支持。
一时间竟无语凝噎。于是决定和 Tableau 拼了,既然它用了 JDBC 驱动,就不信找不到他的相关 Jar 包。果然,在 Tableau 安装路径的 bin 目录下,发现了可疑文件。
# ls -l tabjdbc.jar -rw-r--r-- 1 root root 1562997 Jun 13 13:58 tabjdbc.jar
解压出来瞄了几眼里面的代码,基本可以确定这个就是 Tableau 访问 JDBC 数据源的关键了。
接下来的事情就很简单,利用 Jar 包中的方法,创建个 Demo,自己 Debug 即可。
package com.tableausoftware.data; import com.tableausoftware.jdbc.JDBCProtocolImpl; import com.tableausoftware.jdbc.TableauJDBCException; import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; public class Main { public static void main(String[] args) throws TableauJDBCException, SQLException { String uri = "jdbc:kylin://192.168.200.138:7070/KYLIN_SYSTEM"; HashMap<String, String> info = new HashMap<String, String>(); info.put("user", "ADMIN"); info.put("password", "KYLIN"); JDBCProtocolImpl jdbcProtocol = new JDBCProtocolImpl(uri, info, new HashMap()); if (jdbcProtocol.isConnected(3)) { ProtobufResultSet protobufResultSet = jdbcProtocol.runQuery("select 2333"); ResultSet resultSet = protobufResultSet.resultset; while (resultSet.next()) { System.out.println(resultSet.getString(1)); } } } }
1. Kylin 2.6.1 及以前
通过使用 Kylin 2.6.1 的 JDBC 驱动包,得到了如下报错:
Jul 16, 2019 2:00:17 PM com.tableausoftware.jdbc.JDBCProtocolImpl loadDriver SEVERE: java.sql.SQLException: No suitable driver No suitable driver Exception in thread "main" com.tableausoftware.jdbc.TableauJDBCException: java.sql.SQLException: No suitable driver No suitable driver at com.tableausoftware.jdbc.JDBCProtocolImpl.loadDrive (JDBCProtocolImpl.java:158) at com.tableausoftware.jdbc.JDBCProtocolImpl.<init>(JDBCProtocolImpl.java:70) at com.tableausoftware.jdbc.JDBCProtocolImpl.<init>(JDBCProtocolImpl.java:114) at com.tableausoftware.data.Main.main(Main.java:16) used by: java.sql.SQLException: No suitable driver at com.tableausoftware.jdbc.JDBCProtocolImpl.loadDrive (JDBCProtocolImpl.java:157) ... 3 more
Tableau 界面操作后报错如下:
这里突然回想起 Kylin 官网的 JDBC 驱动使用 Demo(传送门:https://kylin.apache.org/docs/howto/howto_jdbc.html)。是需要手动指定 JDBC 驱动的实现类的:
Driver driver = (Driver) Class.forName("org.apache.kylin.jdbc.Driver").newInstance();
然而,Tableau 在使用 JDBC 驱动时,好像并没有地方让我指定用哪个驱动类进行连接。这样看来,Tableau 使用 SPI 动态注册驱动基本石锤了。注:
Java SPI 机制详解传送门:https://juejin.im/post/5af952fdf265da0b9e652de3
再到 Tableau 官网看看,果然找到了如下内容:
JDBC 4.0 及以后,已经不需要调用 Class.forName 来加载驱动程序了。
因为规范中要求所有的 JDBC 驱动 Jar 包必须在 META-INF/Services/java.sql.driver 中写明各自的驱动名称。开发人员只需要下面一行代码即可根据连接串自动匹配相应的 JDBC 驱动。
Connection con = DriverManager.getConnection(xxx);
这个问题已经在 KYLIN-3965 JDBC fix(https://github.com/apache/kylin/pull/616)中得到了修复。首次 Release 在 Kylin 2.6.2。
2. Kylin 2.6.2 & 2.6.3 & 3.0.0-alpha
因此我们使用 Kylin 2.6.2 及以后的 JDBC 驱动包,即可避免上面找不到驱动的问题。
但是通过使用 Kylin 2.6.2 的 JDBC 驱动包,又得到了如下报错:
Jul 16, 2019 2:42:06 PM com.tableausoftware.jdbc.JDBCProtocolImpl <init> INFO: Initiating connection. Exception in thread "main" com.tableausoftware.jdbc.TableauJDBCException: Error in isConnected at com.tableausoftware.jdbc.JDBCProtocolImpl.isConnected(JDBCProtocolImpl.java:775) at com.tableausoftware.data.Main.main(Main.java:18) Caused by: java.sql.SQLFeatureNotSupportedException at org.apache.kylin.jdbc.shaded.org.apache.calcite.avatica.Helper.unsupported(Helper.java:68) at org.apache.kylin.jdbc.shaded.org.apache.calcite.avatica.AvaticaConnection.isValid(AvaticaConnection.java:376) at com.tableausoftware.jdbc.JDBCProtocolImpl.isConnected(JDBCProtocolImpl.java:773) ... 1 more
这次 Tableau 界面上或者日志中的报错信息量几乎为零。但好在我们找到了 tabjdbc.jar,因此通过 Demo 程序得到了一个稍微详细一点异常信息。
接下来开始面向 Google 编程,通过异常信息找到了这个 issue CALCITE-1520:https://issues.apache.org/jira/browse/CALCITE-1520。
原来是 Apache Calcite Avatica 1.10 的问题,Fix Version 是 avatica-1.12.0。现在我们只需要将 Avatica 的版本改为 1.12 即可。
相关 PR:Upgraded avatica/calcite version(https://github.com/apache/kylin/pull/739)
相关邮件:Kylin-and-Tableau-JDBC(http://apache-kylin.74782.x6.nabble.com/Kylin-and-Tableau-JDBC-td13471.html)
改完 Avatica 版本之后再打一个 JDBC 驱动包出来,上面的 Demo 程序稳稳地打印出了 2333。
Jul 16, 2019 3:28:13 PM com.tableausoftware.jdbc.JDBCProtocolImpl <init> INFO: Initiating connection. 2333
已经发布的 Kylin 3.0.0-alpha2 已修复上述两个问题,以后 Tableau 用户就可以在 Linux 环境下使用 JDBC 驱动访问 Kylin 数据源,不至于被绑死在 Windows 上(开源版 Kylin 仅有 Windows 版 Kylin ODBC 驱动)。
当然方法也很简单,只需要先将相应的 JDBC .jar 文件放置到相应目录,然后直接使用 Tableau 通用 JDBC 数据源进行连接即可。
Tableau 官方文档:https://help.tableau.com/current/pro/desktop/en-us/examples_otherdatabases_jdbc.htm
作者介绍:周天鹏,丁香园大数据运维工程师,主要负责 OLAP 平台的开发与维护。
01 现象 社区小伙伴最近在为 Kylin 4 开发 Soft Affinity + Local Cache
01 背景 随着顺丰末端物流(末端物流主要分为对小哥、柜机、区域等的资源的管理和分批;对路径、排班、改派等信息
Apache Kylin 的今天 目前,Apache Kylin 的最新发布版本是 4.0.1。Apache
Kylin 入选《上海市重点领域(金融类)“十四五”紧缺人才开发目录》 数字经济已成为全球增长新动
在 Kyligence 主办的 Data & Cloud Summit 2021 行业峰会的「数字化转
近日由 Kyligence 主办的 Data & Cloud Summit 2021 行业峰会在上海成
近五年来,Kyligence 服务了金融、制造、零售、互联网等各个行业的龙头企业,我们在服务这些企业的过程中,
2021年1月14日,Kyligence 产品经理陈思捷开启了我们在 2021 年的首场线上分享,为大家介绍了
400 8658 757
工作日:10:00 - 18:00
已有账号? 点此登陆
预约演示,您将获得
完整的产品体验
从数据导入、建模到分析的全流程操作演示。
行业专家解惑
与资深行业专家的交流机会,解答您的个性化问题。
请填写真实信息,我们会在 1-2 个工作日内电话与您联系。
全行业落地场景演示
涵盖金融、零售、餐饮、医药、制造等多个行业,最贴合您的业务需求与场景。
Data + AI 应用落地咨询
与资深技术专家深入交流,助您的企业快速落地 AI 场景应用。
立即预约,您将获得
精准数据计算能力:
接入高精度数值计算大模型服务,为您的企业级AI应用提供强大支持。
个性化业务场景解决方案:
量身定制的计算模型和数据分析服务,切实贴合您的业务需求和应用场景。
Data + AI 落地应用咨询:
与资深专家深入探讨数据和 AI 如何帮助您的企业加速实现应用落地,构建更智能的数据驱动未来。
申请体验,您将获得
体验数据处理性能 2x 加速
同等规模资源、同等量级数据、同一套数据处理逻辑,处理耗时下降一半
专家支持
试用部署、生成数据、性能对比各操作环节在线支持