- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- DLI作业开发流程
- 准备工作
- 创建弹性资源池和队列
- 创建数据库和表
- 数据迁移与数据传输
- 配置DLI访问其他云服务的委托权限
- 使用DLI提交SQL作业
- 使用DLI提交Flink作业
- 使用DLI提交Spark作业
- 使用Notebook实例提交DLI作业
- 使用CES监控DLI服务
- 使用AOM监控DLI服务
- 使用CTS审计DLI服务
- 权限管理
- DLI常用管理操作
- 最佳实践
-
开发指南
- 使用客户端工具连接DLI
- SQL作业开发指南
- Flink作业开发指南
- Spark Jar作业开发指南
-
语法参考
-
Spark SQL语法参考
- Spark SQL常用配置项说明
- Spark SQL语法概览
- Spark开源命令支持说明
- 数据库相关
- 表相关
- 数据相关
- 导出查询结果
- 跨源连接相关
- 视图相关
- 查看计划
- 数据权限相关
- 数据类型
- 自定义函数
-
内置函数
-
日期函数
- 日期函数概览
- add_months
- current_date
- current_timestamp
- date_add
- dateadd
- date_sub
- date_format
- datediff
- datediff1
- datepart
- datetrunc
- day/dayofmonth
- from_unixtime
- from_utc_timestamp
- getdate
- hour
- isdate
- last_day
- lastday
- minute
- month
- months_between
- next_day
- quarter
- second
- to_char
- to_date
- to_date1
- to_utc_timestamp
- trunc
- unix_timestamp
- weekday
- weekofyear
- year
-
字符串函数
- 字符串函数概览
- ascii
- concat
- concat_ws
- char_matchcount
- encode
- find_in_set
- get_json_object
- instr
- instr1
- initcap
- keyvalue
- length
- lengthb
- levenshtein
- locate
- lower/lcase
- lpad
- ltrim
- parse_url
- printf
- regexp_count
- regexp_extract
- replace
- regexp_replace
- regexp_replace1
- regexp_instr
- regexp_substr
- repeat
- reverse
- rpad
- rtrim
- soundex
- space
- substr/substring
- substring_index
- split_part
- translate
- trim
- upper/ucase
- 数学函数
- 聚合函数
- 分析窗口函数
- 其他函数
-
日期函数
- SELECT
-
标示符
- aggregate_func
- alias
- attr_expr
- attr_expr_list
- attrs_value_set_expr
- boolean_expression
- class_name
- col
- col_comment
- col_name
- col_name_list
- condition
- condition_list
- cte_name
- data_type
- db_comment
- db_name
- else_result_expression
- file_format
- file_path
- function_name
- groupby_expression
- having_condition
- hdfs_path
- input_expression
- input_format_classname
- jar_path
- join_condition
- non_equi_join_condition
- number
- num_buckets
- output_format_classname
- partition_col_name
- partition_col_value
- partition_specs
- property_name
- property_value
- regex_expression
- result_expression
- row_format
- select_statement
- separator
- serde_name
- sql_containing_cte_name
- sub_query
- table_comment
- table_name
- table_properties
- table_reference
- view_name
- view_properties
- when_expression
- where_condition
- window_function
- 运算符
-
Flink SQL语法参考
- Flink Opensource SQL1.15语法参考
- Flink Opensource SQL1.12语法参考
- Flink Opensource SQL1.10语法参考
-
HetuEngine SQL语法参考
-
HetuEngine SQL语法
- 使用前必读
- 数据类型
-
DDL 语法
- CREATE SCHEMA
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLE LIKE
- CREATE VIEW
- ALTER TABLE
- ALTER VIEW
- ALTER SCHEMA
- DROP SCHEMA
- DROP TABLE
- DROP VIEW
- TRUNCATE TABLE
- COMMENT
- VALUES
- SHOW语法使用概要
- SHOW SCHEMAS(DATABASES)
- SHOW TABLES
- SHOW TBLPROPERTIES TABLE|VIEW
- SHOW TABLE/PARTITION EXTENDED
- SHOW FUNCTIONS
- SHOW PARTITIONS
- SHOW COLUMNS
- SHOW CREATE TABLE
- SHOW VIEWS
- SHOW CREATE VIEW
- DML 语法
- DQL 语法
- 辅助命令语法
- 预留关键字
- SQL函数和操作符
- 数据类型隐式转换
- 附录
-
HetuEngine SQL语法
- Hudi SQL语法参考
- Delta SQL语法参考
-
Spark SQL语法参考
-
API参考
- API使用前必读
- API概览
- 如何调用API
- API快速入门
- 权限相关API
- 全局变量相关API
- 资源标签相关API
- 增强型跨源连接相关API
- 跨源认证相关API
- 弹性资源池相关API
- 队列相关API(推荐)
- SQL作业相关API
- SQL模板相关API
- Flink作业相关API
- Flink作业模板相关API
- Flink作业管理相关API
- Spark作业相关API
- Spark作业模板相关API
- 权限策略和授权项
- 历史API
- 公共参数
- SDK参考
- 场景代码示例
-
常见问题
- DLI产品咨询类
- DLI弹性资源池和队列类
-
DLI数据库和表类
- 为什么在DLI控制台中查询不到表?
- OBS表压缩率较高怎么办?
- 字符码不一致导致数据乱码怎么办?
- 删除表后再重新创建同名的表,需要对操作该表的用户和项目重新赋权吗?
- DLI分区内表导入的文件不包含分区列的数据,导致数据导入完成后查询表数据失败怎么办?
- 创建OBS外表,由于OBS文件中的某字段存在换行符导致表字段数据错误怎么办?
- join表时没有添加on条件,造成笛卡尔积查询,导致队列资源爆满,作业运行失败怎么办?
- 手动在OBS表的分区目录下添加了数据,但是无法查询到数据怎么办?
- 为什么insert overwrite覆盖分区表数据的时候,覆盖了全量数据?
- 跨源连接RDS表中create_date字段类型是datetime,为什么DLI中查出来的是时间戳呢?
- SQL作业执行完成后,修改表名导致datasize不正确怎么办?
- 从DLI导入数据到OBS,数据量不一致怎么办?
-
增强型跨源连接类
- 增强型跨源连接绑定队列失败怎么办?
- DLI增强型跨源连接DWS失败怎么办?
- 创建跨源成功但测试网络连通性失败怎么办?
- 怎样配置DLI队列与数据源的网络连通?
- 为什么DLI增强型跨源连接要创建对等连接?
- DLI创建跨源连接,绑定队列一直在创建中怎么办?
- 新建跨源连接,显示已激活,但使用时提示communication link failure错误怎么办?
- 跨源访问MRS HBase,连接超时,日志未打印错误怎么办?
- DLI跨源连接报错找不到子网怎么办?
- 跨源RDS表,执行insert overwrite提示Incorrect string value错误怎么办?
- 创建RDS跨源表提示空指针错误怎么办?
- 对跨源DWS表执行insert overwrite操作,报错:org.postgresql.util.PSQLException: ERROR: tuple concurrently updated
- 通过跨源表向CloudTable Hbase表导入数据,executor报错:RegionTooBusyException
- 通过DLI跨源写DWS表,非空字段出现空值异常怎么办?
- 更新跨源目的端源表后,未同时更新对应跨源表,导致insert作业失败怎么办?
- RDS表有自增主键时怎样在DLI插入数据?
-
SQL作业类
- SQL作业开发类
-
SQL作业运维类
- 用户导表到OBS报“path obs://xxx already exists”错误
- 对两个表进行join操作时,提示:SQL_ANALYSIS_ERROR: Reference 't.id' is ambiguous, could be: t.id, t.id.;
- 执行查询语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
- 执行查询语句报错:There should be at least one partition pruning predicate on partitioned table XX.YYY
- LOAD数据到OBS外表报错:IllegalArgumentException: Buffer size too small. size
- SQL作业运行报错:DLI.0002 FileNotFoundException
- 用户通过CTAS创建hive表报schema解析异常错误
- 在DataArts Studio上运行DLI SQL脚本,执行结果报org.apache.hadoop.fs.obs.OBSIOException错误
- 使用CDM迁移数据到DLI,迁移作业日志上报UQUERY_CONNECTOR_0001:Invoke DLI service api failed错误
- SQL作业访问报错:File not Found
- SQL作业访问报错:DLI.0003: AccessControlException XXX
- SQL作业访问外表报错:DLI.0001: org.apache.hadoop.security.AccessControlException: verifyBucketExists on {{桶名}}: status [403]
- 执行SQL语句报错:The current account does not have permission to perform this operation,the current account was restricted. Restricted for no budget.
-
Flink作业类
- Flink作业咨询类
-
Flink SQL作业类
- 怎样将OBS表映射为DLI的分区表?
- Flink SQL作业Kafka分区数增加或减少,怎样不停止Flink作业实现动态感知?
- 在Flink SQL作业中创建表使用EL表达式,作业运行提示DLI.0005错误怎么办?
- Flink作业输出流写入数据到OBS,通过该OBS文件路径创建的DLI表查询无数据
- Flink SQL作业运行失败,日志中有connect to DIS failed java.lang.IllegalArgumentException: Access key cannot be null错误
- Flink SQL作业消费Kafka后sink到es集群,作业执行成功,但未写入数据
- Flink Opensource SQL如何解析复杂嵌套 JSON?
- Flink Opensource SQL从RDS数据库读取的时间和RDS数据库存储的时间为什么会不一致?
- Flink Opensource SQL Elasticsearch结果表failure-handler参数填写retry_rejected导致提交失败
- Kafka Sink配置发送失败重试机制
- 如何在一个Flink作业中将数据写入到不同的Elasticsearch集群中?
- 作业语义检验时提示DIS通道不存在怎么处理?
- Flink jobmanager日志一直报Timeout expired while fetching topic metadata怎么办?
- Flink Jar作业类
- Flink作业性能调优类
-
Spark作业相类
- Spark作业开发类
-
Spark作业运维类
- 运行Spark作业报java.lang.AbstractMethodError
- Spark作业访问OBS数据时报ResponseCode: 403和ResponseStatus: Forbidden错误
- 有访问OBS对应的桶的权限,但是Spark作业访问时报错 verifyBucketExists on XXXX: status [403]
- Spark作业运行大批量数据时上报作业运行超时异常错误
- 使用Spark作业访问sftp中的文件,作业运行失败,日志显示访问目录异常
- 执行作业的用户数据库和表权限不足导致作业运行失败
- 为什么Spark3.x的作业日志中打印找不到global_temp数据库
- 在使用Spark2.3.x访问元数据时,DataSource语法创建avro类型的OBS表创建失败
- DLI资源配额类
- DLI权限管理类
- DLI API类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
配置Tableau通过Kyuubi连接DLI进行数据查询和分析
Tableau是一款数据分析和可视化工具,支持通过拖放式界面连接到各种数据源,创建交互式和共享式的数据可视化,从而将数据转化为可操作的见解。
Kyuubi是一个分布式 SQL 查询引擎,它提供了标准的SQL接口,使用户能够方便地访问和分析存储在大数据平台中的数据。
通过将Tableau与Kyuubi对接,用户可以利用Kyuubi访问DLI进行数据查询和分析。这种集成简化了数据访问流程,提供了数据的统一管理和分析能力,使得用户能够更深入地洞察数据。
本节操作介绍Tableau基于Kyuubi连接DLI,以访问和分析DLI中的数据的操作步骤。
操作流程

- 步骤1:安装并配置Kyuubi连接DLI:安装并配置Kyuubi,确保Kyuubi可以连接到DLI。
- 步骤2:配置ODBC连接Kyuubi:配置Superset安装数据连接驱动。
- 步骤3:配置Tableau使用ODBC连接到Kyuubi:在BI工具中创建一个新的数据连接,通过JDBC连接Kyuubi。
步骤1:安装并配置Kyuubi连接DLI
如需使用外网访问Kyuubi请确保弹性云服务器绑定弹性公网IP,并配置安全组入方向开启10009和3309端口。
- 安装JDK。
在安装和使用Kyuubi前,确保您的开发环境已安装JDK。
Java SDK要求使用JDK1.8或更高版本。考虑到后续版本的兼容性,推荐使用1.8版本。
- 下载JDK。
从Oracle官网下载并安装JDK1.8版本安装包。
本例使用jdk-8u261-linux-x64.tar.gz。
- 将jdk上传到linux服务器对应的目录下并执行解压命令,此处上传到/usr/local目录下。
sudo tar -xzf jdk-8u261-linux-x64.tar.gz -C /usr/local/
- 配置环境变量。
export JAVA_HOME=/usr/local/jdk-1.8.0_261 export PATH=$PATH:$JAVA_HOME/bin
- 执行以下命令应用环境变量。
source ~/.bashrc
- 执行命令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)
- 下载JDK。
- 安装Kyuubi
- 访问Apache Kyuubi的下载Kyuubi安装包。了解更多Kyuubi安装操作。
- 解压下载的Kyuubi安装包。
tar -xzf kyuubi-{version}-bin.tar.gz
- 配置环境变量(可选):
- 配置Kyuubi连接DLI
- 在Kyuubi的根目录下添加DLI驱动。
在“DLI SDK DOWNLOAD”页面,单击Kyuubi驱动包链接,下载对应版本的驱动包。
并将该驱动放在kyuubi根目录/externals/engines/jdbc。
确保插件用户组和权限与其他Jar保持一致。
- 执行以下命令修改Kyuubi配置文件。
cd $KYUUBI_HOME/confvi kyuubi-defaults.conf
配置项说明请参考表1。
表1 kyuubi配置参数说明 配置项
说明
是否必选
示例
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:fales)。
- 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
- 快速启动kyuubi。
cd /bin ./kyuubi start restart
连接成功后,可以执行SQL查询来测试Kyuubi与DLI的连接是否正常工作。
- 在Kyuubi的根目录下添加DLI驱动。
- (可选)配置主机的host文件提高Kyuubi的访问效率
为了提高Kyuubi的访问效率,建议在主机的/etc/hosts 配置Kyuubi主机IP的映射关系。
- 执行ifconfig查看主机IP地址。
图2 查看主机IP地址
- 将该IP配置在/etc/hosts文件中。
图3 在/etc/hosts文件中配置IP地址
- 执行ifconfig查看主机IP地址。
步骤2:配置ODBC连接Kyuubi
- 安装ODBC驱动
根据数据库类型,需要在本地主机上安装相应的ODBC驱动。本例使用Hive数据库类型。
- Cloudera Hive ODBC,推荐使用v2.5.12。
- Microsoft Hive ODBC,推荐使用v2.6.12.1012。
- 配置ODBC连接Kyuubi
- 在Windows系统中,打开“控制面板 > 管理工具 > 数据源 (ODBC)”。
- 配置新的ODBC数据源。
- 在ODBC中单击“User DSN”。
- 单击“Add”创建新的数据源。
- 选择Hive ODBC Driver,单击“OK”。
图4 ODBC新建数据源连接 - 在创建的新数据源配置界面中,输入Kyuubi服务器的相关信息。
- 数据库名称:本例输入DLI数据库名称。
- 服务器地址:输入Kyuubi服务器的弹性公网IP地址。
- 端口号:Kyuubi服务监听的端口,使用Hive Thirft协议,默认端口10009。
- 用户名和密码:按需配置Kyuubi服务器用户名和密码。
按需配置其他高级选项,然后保存配置。
图5 ODBC配置数据源连接信息 - 单击“Test”测试数据源连接是否成功,如果连接正常单击“OK”保存连接。
步骤3:配置Tableau使用ODBC连接到Kyuubi
- 单击并安装Tableau。获取Tableau安装包。
- 打开Tableau。
- 在开始页面的“连接”窗格中,选择你想要连接的数据源类型。本例选择Hive类型的数据连接。
- 配置数据连接信息。
- 连接:Hive
- 服务器:Kyuubi主机的IP地址。
- 端口:连接Kyuubi的端口,Hive Thrift协议对接,默认端口10009。
- 身份验证:本例选择用户名的认证方式。
- 用户名:Kyuubi用户名。
- 单击“登录”连接Kyuubi。
常用操作:SQL作业参数设置
-- @set 参数 示例: -- @set dli.sql.current.database=tpch -- @set dli.sql.shuffle.partitions=10

在DLI的SQL编辑器的执行效果:Set参数会修改为注释提交到DLI侧执行。
