
# 配置Tableau通过Kyuubi连接DLI进行数据查询和分析
Tableau是一款数据分析和可视化工具，支持通过拖放式界面连接到各种数据源，创建交互式和共享式的数据可视化，从而将数据转化为可操作的见解。
Kyuubi是一个分布式 SQL 查询引擎，它提供了标准的SQL接口，使用户能够方便地访问和分析存储在大数据平台中的数据。
通过将Tableau与Kyuubi对接，用户可以利用Kyuubi访问DLI进行数据查询和分析。这种集成简化了数据访问流程，提供了数据的统一管理和分析能力，使得用户能够更深入地洞察数据。
本节操作介绍Tableau基于Kyuubi连接DLI，以访问和分析DLI中的数据的操作步骤。
#### 操作流程
图1操作流程   
![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001950187134.png)
- [步骤1：安装并配置Kyuubi连接DLI]：安装并配置Kyuubi，确保Kyuubi可以连接到DLI。
- [步骤2：配置ODBC连接Kyuubi]：配置Tableau安装数据连接驱动。
- [步骤3：配置Tableau使用ODBC连接到Kyuubi]：在BI工具中创建一个新的数据连接，通过JDBC连接Kyuubi。
 
 #### 步骤1：安装并配置Kyuubi连接DLI
如需使用外网访问Kyuubi请确保弹性云服务器绑定弹性公网IP，并配置安全组入方向开启10009和3309端口。
1. **安装JDK** 。
   
   在安装和使用Kyuubi前，确保您的开发环境已安装JDK。
   Java SDK要求使用JDK1.8或更高版本。考虑到后续版本的兼容性，推荐使用1.8版本。
   1. 下载JDK。 从[Oracle官网](https://www.oracle.com/java/technologies/downloads/)下载并安装JDK1.8版本安装包。
      本例使用jdk-8u261-linux-x64.tar.gz。
      
   
   2. 将jdk上传到linux服务器对应的目录下并执行解压命令，此处上传到/usr/local目录下。
      ```
      sudo tar -xzf jdk-8u261-linux-x64.tar.gz -C /usr/local/
      ```
      
   
   3. 配置环境变量。 编辑.bashrc或.profile文件，添加以下行：
      ```
      export JAVA_HOME=/usr/local/jdk-1.8.0_261
      export PATH=$PATH:$JAVA_HOME/bin
      ```
      
   
   
   
   4. 执行以下命令应用环境变量。
      ```
      source ~/.bashrc
      ```
      
   
   5. 执行命令**java -version** ，检查是否安装成功，如下显示版本号信息说明java环境安装成功。
      ```
      java version "1.8.0_261"
      Java(TM) SE Runtime Environment (build 1.8.0_261-b12)
      Java HotSpot(TM) 64-Bit Server VM (build 25.261-b12, mixed mode)
      ```
      
   
   
   
   
2. **安装** **Kyuubi**
   
   1. 访问[Apache Kyuubi](https://archive.apache.org/dist/kyuubi/kyuubi-1.7.0/)的下载Kyuubi安装包。了解更多[Kyuubi安装操作](https://kyuubi.readthedocs.io/en/v1.7.2/deployment/index.html)。
   
   2. 解压下载的Kyuubi安装包。
      ```
      tar -xzf kyuubi-{version}-bin.tar.gz
      ```
      
   
   3. 配置环境变量（可选）： 将Kyuubi的bin目录添加到PATH环境变量中，确保可以在任何位置调用Kyuubi的脚本。
      
   
   
   
   
3. **配置Kyuubi连接DLI**
   
   1. 在Kyuubi的根目录下添加DLI驱动。 在"[DLI SDK DOWNLOAD](https://uquery-sdk.obs-website.cn-north-1.myhuaweicloud.com/)"页面，单击Kyuubi驱动包链接，下载对应版本的驱动包。
      并将该驱动放在kyuubi根目录/externals/engines/jdbc。
      确保插件用户组和权限与其他Jar保持一致。
      
   
   2. 执行以下命令修改Kyuubi配置文件。 **cd $KYUUBI_HOME/conf**
      **vi kyuubi-defaults.conf**
      配置项说明请参考[表1]。
       表1kyuubi配置参数说明 
      | 配置项                                                | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 是否必选 | 示例                                                                                                                                                                                                                                                                                                                              |
      |:---|:---|:---|:---|
      | kyuubi.engine.type                                 | JDBC服务类型。这里请指定为dli。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 是    | jdbc                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.jdbc.type                            | 引擎类型。请使用dli。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | 是    | dli                                                                                                                                                                                                                                                                                                                             |
      | kyuubi.engine.jdbc.driver.class                    | 连接JDBC服务使用的驱动类名。请使用com.huawei.dli.jdbc.DliDriver                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 是    | com.huawei.dli.jdbc.DliDriver                                                                                                                                                                                                                                                                                                   |
      | kyuubi.engine.jdbc.connection.url                  | JDBC服务连接的URL。 格式：jdbc:dli://{dliendpoint} /{projectId}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 是    | jdbc:dli://{dliendpoint} /{projectId}                                                                                                                                                                                                                                                                                           |
      | kyuubi.engine.jdbc.session.initialize.sql          | 用于指定在建立JDBC会话时执行的初始化SQL语句。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 否    | select 1 如果在DLI的管理控制台看到select 1，代表初始化成功。                                                                                                                                                                                                                              |
      | kyuubi.frontend.protocols                          | 用于指定Kyuubi服务支持的前端协议。Kyuubi支持多种前端协议，允许用户通过不同的接口与Kyuubi进行交互。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | 是    | - mysql  - thrift_binary   |
      | kyuubi.engine.dli.schema.show.name                 | 用于指定当用户执行show schemas或show databases语句时，Kyuubi引擎如何展示数据源接口的模式名称。 - true：表示在展示模式名称时，包含 DLI 的名称作为前缀。  - false：表示在展示模式名称时，不包含 DLI 的名称。   例如如果配置为true，并且有一个DLI名称为 hive，那么在执行show schemas时，输出为hive.default的格式。 如果配置为false，输出为default的格式。 | 否    | - true  - false        |
      | kyuubi.engine.dli.jdbc.connection.region           | DLI的区域名称和服务名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 是    | regionname=ap-southeast-2                                                                                                                                                                                                                                                                                                       |
      | kyuubi.engine.dli.jdbc.connection.queue            | DLI服务的队列名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 是    | dli_test                                                                                                                                                                                                                                                                                                                        |
      | kyuubi.engine.dli.jdbc.connection.database         | 用于指定Kyuubi引擎通过JDBC连接到DLI数据源时默认使用的数据库名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | 是    | tpch                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.jdbc.connection.ak               | AK/SK认证密钥。 如果使用AK/SK认证方式。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | 是    | accesskey=your-access-key                                                                                                                                                                                                                                                                                                       |
      | kyuubi.engine.dli.jdbc.connection.sk               | DLI的区域名称和服务名称。 如果使用AK/SK认证方式时配置。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 是    | secretkey=your-secret-key                                                                                                                                                                                                                                                                                                       |
      | kyuubi.engine.dli.jdbc.connection.project          | DLI资源所在的项目ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 是    | 0b33ea2a7e0010802fe4c009bb05076d                                                                                                                                                                                                                                                                                                |
      | kyuubi.engine.dli.sql.limit.time.sec               | SQL查询的执行时间限制。 默认600s                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | 否    | 300                                                                                                                                                                                                                                                                                                                             |
      | kyuubi.engine.dli.result.line.num.limit            | SQL查询的返回的最大条数。 默认返回10万条。 配置为-1代表不限制返回的条数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 是    | 50000                                                                                                                                                                                                                                                                                                                           |
      | kyuubi.engine.dli.small.file.merge                 | 配置是否开启小文件自动合并。默认为false，代表不开启。 - true：开启  - false：不开启                                                                                                                                                                                                                                      | 是    | true                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.bi.type                          | 用于指定BI工具类型。 支持fine/ grafana/ superset/ tableau/ power/dbt/yongHong                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | 是    | fine                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.boolean.type.to.int              | 定义DLI的Boolean类型数据是以1/0返回，还是true/false返回 当BI工具类型为Grafana时，需要设置为true。 - true：按1/0返回（1：代表true，0：false）。  - false：按true/false返回。   默认取值false。                                                                                            | 否    | false                                                                                                                                                                                                                                                                                                                           |
      | kyuubi.engine.dli.set.conf.transform.to.annotation | 支持在SQL中设置set spark参数。 PowerBI、FineBI、SuperSet、DBT需要设置为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 否    | true                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.set.conf.sql.suffix              | 支持在SQL中尾端设置set spark参数。 PowerBI、DBT需要设置为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 否    | true                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.result.cache.enable              | 是否开启库表数据缓存，开启后自动缓存库表信息。默认为true。 - true：开启  - false：不开启                                                                                                                                                                                                                                   | 否    | true                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.cache.limit.line.num             | 配置缓存的最大条数。 默认缓存10万条。 配置为-1代表不限制缓存的最大条数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 否    | 1000                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.engine.dli.cache.time.sec                   | 配置缓存的时间。 默认为1800s。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 否    | 1800                                                                                                                                                                                                                                                                                                                            |
      | kyuubi.operation.incremental.collect               | kyuubi会预加载select结果数据到缓存加快读取数据，数据量较大的场景防止内存OOM建议关闭。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | 否    | false 配置为false代表关闭预加载。                                                                                                                                                                              |
      | kyuubi.engine.jdbc.memory                          | jdbc engine进程内存。 默认为1g，建议改成5g以上加大jdbc engine进程内存使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 否    | 5g                                                                                                                                                                                                                                                                                                                              |
         
      
   
   3. 快速启动kyuubi。 进入云服务器的根目录/bin执行以下命令启动kyuubi。
      ```
      cd /bin
      ./kyuubi start  restart
      ```
      连接成功后，可以执行SQL查询来测试Kyuubi与DLI的连接是否正常工作。
      
   
   
   
   
4. （**可选）配置主机的host文件提高Kyuubi的访问效率**
   
   为了提高Kyuubi的访问效率，建议在主机的/etc/hosts 配置Kyuubi主机IP的映射关系。
   1. 执行ifconfig查看主机IP地址。
      图2查看主机IP地址   
      ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001950177546.png "点击放大") 
   
   2. 将该IP配置在/etc/hosts文件中。
      图3在/etc/hosts文件中配置IP地址   
      ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001981017129.png) 
   
   
   
   
 
 #### 步骤2：配置ODBC连接Kyuubi
1. **安装ODBC驱动**
   
   根据数据库类型，需要在本地主机上安装相应的ODBC驱动。本例使用Hive数据库类型。
   - [Cloudera Hive ODBC](https://www.cloudera.com/downloads/connectors/hive/odbc/2-5-12.html)，推荐使用v2.5.12。
   
   - [Microsoft Hive ODBC](https://www.microsoft.com/en-us/download/details.aspx?id=40886)，推荐使用v2.6.12.1012。
   
   
   
   
2. **配置ODBC连接Kyuubi**
   
   1. 在Windows系统中，打开"控制面板 \> 管理工具 \> 数据源 (ODBC)"。
   
   2. 配置新的ODBC数据源。
      1. 在ODBC中单击"User DSN"。
      
      2. 单击"Add"创建新的数据源。
      
      3. 选择Hive ODBC Driver，单击"OK"。
      
      
      图4ODBC新建数据源连接   
      ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001981026717.png "点击放大") 
   
   3. 在创建的新数据源配置界面中，输入Kyuubi服务器的相关信息。
      - 数据库名称：本例输入DLI数据库名称。
      
      - 服务器地址：输入Kyuubi服务器的弹性公网IP地址。
      
      - 端口号：Kyuubi服务监听的端口，使用Hive Thirft协议，默认端口10009。
      
      - 用户名和密码：按需配置Kyuubi服务器用户名和密码。
      
      
      按需配置其他高级选项，然后保存配置。
      图5ODBC配置数据源连接信息   
      ![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001981146573.png) 
   
   4. 单击"Test"测试数据源连接是否成功，如果连接正常单击"OK"保存连接。
   
   
   
   
 
 #### 步骤3：配置Tableau使用ODBC连接到Kyuubi
1. 单击并安装Tableau。获取[Tableau安装包](https://www.tableau.com/zh-cn/products/desktop/download)。
2. 打开Tableau。
3. 在开始页面的"连接"窗格中，选择您想要连接的数据源类型。本例选择Hive类型的数据连接。
4. 配置数据连接信息。
   - 连接：Hive
   
   - 服务器：Kyuubi主机的IP地址。
   
   - 端口：连接Kyuubi的端口，Hive Thrift协议对接，默认端口10009。
   
   - 身份验证：本例选择用户名的认证方式。
   
   - 用户名：Kyuubi用户名。
    
5. 单击"登录"连接Kyuubi。
 
#### 常用操作：SQL作业参数设置
在sql语句的末尾添加注解参数。
```
-- @set 参数
示例：
-- @set dli.sql.current.database=tpch
-- @set dli.sql.shuffle.partitions=10
```
图6Tableau参数配置示例   
![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000001935770569.png)
在DLI的SQL编辑器的执行效果：Set参数会修改为注释提交到DLI侧执行。
图7在DLI的SQL编辑器查看配置的参数   
![](https://support.huaweicloud.com/bestpractice-dli/zh-cn_image_0000002130546364.png "点击放大")
