Tableau & Starrocks使用文档

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

  1. 安装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/

  2. 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>

其中:

  1. odbc-connect-string-extras为ODBC参数设置,在MySQL ODBC 8中默认的鉴权方式为caching_sha2_password,需要设置为mysql_native_password。

  2. 在没有维度列,直接对指标列做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
  1. 使用Tableau Desktop

  2. 选择MySQL Connector连接Starrocks。

  1. 输入Starrocks的地址、端口、用户名、密码进行登录。

  1. 选择数据库,并将表拖放到右上角画布,然后点击最下面的工作表1就可以进行数据分析了。

使用MySQL JDBC Connector

  1. 下载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

  1. 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
  1. 使用Tableau Desktop

  2. 选择其他数据库(JDBC)连接Starrocks。

  1. 输入URL,方言选择MySQL,用户名密码进行登录。

URL示例: jdbc:mysql://starrocks_host:starrocks_port/db_name

  1. 选择数据库,选择表就可以进行数据分析了。

LDAP方式连接

使用Tableau自带的MySQL Connector

  1. 安装MySQL ODBC

同非LDAP MySQL Connector。

  1. 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>
  1. 使用Tableau Desktop

选择MySQL Connector,输入Starrocks的地址、端口、LDAP用户名、LDAP密码进行登录。

使用MySQL JDBC Connector

  1. 下载MySQL JDBC Connector

同非LDAP JDBC Connector。

  1. TDC配置

同非LDAP JDBC Connector。

  1. 部署权限相关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

  1. 使用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

使用建议

  1. 优先使用Tableau自带的MySQL Connector,其次考虑JDBC Connector,不要使用ODBC Connector。优先使用8版本。
  • 自带的Connector已针对特定数据库优化。
  • ODBC Connector对于date datetime类型支持不好。
  1. 时间层级上的过滤问题

    date、datetime类型可以自动生成时间维度层级关系,方便用户使用。

    参考三款BI兼容性共性问题

  2. largeint类型识别错误问题

    参考三款BI兼容性共性问题

  3. 分析报表制作过程中建议先加一些过滤条件保证只查询少量数据,制作完成后将这些无用的过滤条件去掉。

2赞