Tableau Starrocks使用文档
本文以Tableau Desktop v2019.1.0为例,总结Tableau以Starrocks作为数据源,在数据连接(ODBC\JDBC)、LDAP方式连接的一些问题及解决方案,并针对Starrocks的特性给出一些使用建议。
Tableau Desktop下载安装
略
简单教程,基于自带的superstore数据集
https://www.w3cschool.cn/tableau/tableau_overview.html
连接
Tableau提供了多种数据连接的方式,有针对特定数据源提供的Connector、ODBC Connector、JDBC Connector等。如果要连接到Tableau具有指定连接选项的数据库,则使用指定Connector,指定Connector已针对特定的数据源功能进行过优化,确保Connector可靠并且性能良好。
由于Starrocks并不完全兼容MySQL,可以使用Tableau数据源自定义 (TDC) 文件对连接信息进行微调,使得Tableau发出的sql更适合Starrocks,从而提高性能。另外自定义的ODBC参数可以解决一些兼容性的问题。
TDC文件后缀必须为.tdc(文件名无所谓),必须放在指定目录下。
- Mac
/Users/<name>/Documents/My Tableau Repository/Datasources
- Windows
C:\Users\<name>\Documents\My Tableau Repository\Datasources
其中 My Tableau Repository/Datasources
对应中文目录为 我的 Tableau 存储库/数据源
使用Tableau自带的MySQL Connector
-
安装MySQL ODBC
参考Tableau官方文档进行安装,文档地址 https://www.tableau.com/en-us/support/drivers,Data Source选择MySQL,然后选择相应的操作系统和位版本。
Windows
安装MySQL ODBC connector,目前最新版本为8.0.21
https://dev.mysql.com/downloads/connector/odbc/Mac
安装iODBC Driver Manager
http://www.iodbc.org/dataspace/doc/iodbc/wiki/iodbcWiki/Downloads#Mac%20OS%20X安装MySQL ODBC connector,目前最新版本为8.0.21(最新版本8.0.25,不兼容。8.0.23可以)
https://dev.mysql.com/downloads/connector/odbc/ -
TDC配置
将下面内容保存成starrocks_odbc.tdc文件,放在TDC指定目录下。
<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='mysql' enabled='true' version='99.9'>
<vendor name='mysql' />
<driver name='mysql' />
<customizations>
<customization name='odbc-connect-string-extras' value='default_auth=mysql_native_password' />
<customization name='CAP_QUERY_HAVING_REQUIRES_GROUP_BY' value='yes' />
</customizations>
</connection-customization>
其中:
-
odbc-connect-string-extras为ODBC参数设置,在MySQL ODBC 8中默认的鉴权方式为caching_sha2_password,需要设置为mysql_native_password。
-
在没有维度列,直接对指标列做sum的时候发出的sql无法命中rollup表。
CAP_QUERY_HAVING_REQUIRES_GROUP_BY
可以进行优化。sql如下:
# 优化前无法命中rollup
SELECT SUM(`orders`.`sales`) AS `sum_sales_ok`
FROM `orders`
HAVING COUNT(1) > 0
# 优化后
SELECT SUM(`orders`.`sales`) AS `sum_sales_ok`
FROM `orders`
GROUP BY 1.1000000000000001
-
使用Tableau Desktop
-
选择MySQL Connector连接Starrocks。
-
输入Starrocks的地址、端口、用户名、密码进行登录。
- 选择数据库,并将表拖放到右上角画布,然后点击最下面的工作表1就可以进行数据分析了。
使用MySQL JDBC Connector
-
下载MySQL JDBC Connector
下载地址 https://dev.mysql.com/downloads/connector/j/
目前最新版本为8.0.21,Operating System选择Platform Independent,解压后将mysql-connector-java-8.0.21.jar拷贝到jar指定目录。
Mac /Users/<name>/Library/Tableau/Drivers
Windows C:\Program Files\Tableau\Drivers
-
TDC配置
将下面内容保存成starrocks_jdbc.tdc文件,放在TDC指定目录下。
<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='genericjdbc' enabled='true' version='99.9'>
<vendor name='genericjdbc' />
<driver name='mysql' />
<customizations>
<customization name='CAP_QUERY_HAVING_REQUIRES_GROUP_BY' value='yes' />
</customizations>
</connection-customization>
CAP_QUERY_HAVING_REQUIRES_GROUP_BY
作用:
- 禁止以下sql
SELECT SUM(1) AS `COL`
FROM `orders`
HAVING COUNT(1) > 0
- 优化以下sql
# 优化前无法命中rollup
SELECT SUM(`orders`.`sales`) AS `sum_sales_ok`
FROM `orders`
HAVING COUNT(1) > 0
# 优化后
SELECT SUM(`orders`.`sales`) AS `sum_sales_ok`
FROM `orders`
GROUP BY 1.1000000000000001
-
使用Tableau Desktop
-
选择其他数据库(JDBC)连接Starrocks。
-
输入URL,方言选择MySQL,用户名密码进行登录。
URL示例: jdbc:mysql://starrocks_host:starrocks_port/db_name
-
选择数据库,选择表就可以进行数据分析了。
LDAP方式连接
使用Tableau自带的MySQL Connector
-
安装MySQL ODBC
同非LDAP MySQL Connector。
-
TDC配置
LDAP方式需要传明文密码,因此要将鉴权方式改为mysql_clear_password。将下面的内容保存成starrocks_odbc.tdc文件,放在TDC指定目录下。
<?xml version='1.0' encoding='utf-8' ?>
<connection-customization class='mysql' enabled='true' version='99.9'>
<vendor name='mysql' />
<driver name='mysql' />
<customizations>
<customization name='odbc-connect-string-extras' value='default_auth=mysql_clear_password;enable_cleartext_plugin=1' />
<customization name='CAP_QUERY_HAVING_REQUIRES_GROUP_BY' value='yes' />
</customizations>
</connection-customization>
-
使用Tableau Desktop
选择MySQL Connector,输入Starrocks的地址、端口、LDAP用户名、LDAP密码进行登录。
使用MySQL JDBC Connector
-
下载MySQL JDBC Connector
同非LDAP JDBC Connector。
-
TDC配置
同非LDAP JDBC Connector。
-
部署权限相关jar
由于MySQL JDBC中对于明文方式的验证需要SSL,而Starrocks目前不支持SSL,需要自定义一个MysqlClearPasswordPluginWithoutSSL类。
- JDBC 8
将以下内容保存到文件./org/apache/starrocks/mysql/MysqlClearPasswordPluginWithoutSSL.java
package org.apache.starrocks.mysql;
import com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin;
public class MysqlClearPasswordPluginWithoutSSL extends MysqlClearPasswordPlugin {
@Override
public boolean requiresConfidentiality() {
return false;
}
}
执行以下命令生成jar包
javac -classpath mysql-connector-java-8.0.21.jar ./org/apache/starrocks/mysql/MysqlClearPasswordPluginWithoutSSL.java
jar -cf starrocks-auth.jar ./org/apache/starrocks/mysql/MysqlClearPasswordPluginWithoutSSL.class
将starrocks_auth.jar拷贝到jar指定目录。
Mac /Users/<name>/Library/Tableau/Drivers
Windows C:\Program Files\Tableau\Drivers
- JDBC 5
将
com.mysql.cj.protocol.a.authentication.MysqlClearPasswordPlugin
替换为
com.mysql.jdbc.authentication.MysqlClearPasswordPlugin
-
使用Tableau Desktop
选择其他数据库(JDBC)连接Starrocks。
输入URL,方言选择MySQL,LDAP用户名、LDAP密码进行登录。
URL示例:
# JDBC 8
jdbc:mysql:/starrocks_host:starrocks_port/db_name?authenticationPlugins=org.apache.starrocks.mysql.MysqlClearPasswordPluginWithoutSSL&defaultAuthenticationPlugin=org.apache.starrocks.mysql.MysqlClearPasswordPluginWithoutSSL&disabledAuthenticationPlugins=com.mysql.cj.protocol.a.authentication.MysqlNativePasswordPlugin
# JDBC 5
jdbc:mysql://starrocks_host:starrocks_port/db_name?authenticationPlugins=org.apache.starrocks.mysql.MysqlClearPasswordPluginWithoutSSL&defaultAuthenticationPlugin=org.apache.starrocks.mysql.MysqlClearPasswordPluginWithoutSSL&disabledAuthenticationPlugins=com.mysql.jdbc.authentication.MysqlNativePasswordPlugin
使用建议
- 优先使用Tableau自带的MySQL Connector,其次考虑JDBC Connector,不要使用ODBC Connector。优先使用8版本。
- 自带的Connector已针对特定数据库优化。
- ODBC Connector对于date datetime类型支持不好。
-
时间层级上的过滤问题
date、datetime类型可以自动生成时间维度层级关系,方便用户使用。
-
largeint类型识别错误问题
-
分析报表制作过程中建议先加一些过滤条件保证只查询少量数据,制作完成后将这些无用的过滤条件去掉。