- 最新动态
- 功能总览
- 服务公告
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 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类
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
字符串函数和运算符
字符串运算符
||表示字符连接
SELECT 'he'||'llo'; --hello
字符串函数
这些函数假定输入字符串包含有效的UTF-8编码的Unicode代码点。不会显式检查UTF-8数据是否有效,对于无效的UTF-8数据,函数可能会返回错误的结果。可以使用from_utf8来更正无效的UTF-8数据。
此外,这些函数对Unicode代码点进行运算,而不是对用户可见的字符(或字形群集)进行运算。某些语言将多个代码点组合成单个用户感观字符(这是语言书写系统的基本单位),但是函数会将每个代码点视为单独的单位。
lower和upper函数不执行某些语言所需的区域设置相关、上下文相关或一对多映射。
- char_length(string) → bigint
- character_length(string) → bigint
- codepoint(string) → integer
描述:返回单个字符对应的Unicode编码。
select codepoint('d'); --100
- concat(string1, string2) → varchar
select concat('hello','world'); -- helloworld
- concat_ws(string0, string1, ..., stringN) → varchar
描述:将string1、string2、...,stringN,以string0作为分隔符串联成一个字符串。如果string0为null,则返回值为null。分隔符后的参数如果是NULL值,将会被跳过。
select concat_ws(',','hello','world'); -- hello,world select concat_ws(NULL,'def'); --NULL select concat_ws(',','hello',NULL,'world'); -- hello,world select concat_ws(',','hello','','world'); -- hello,,world
- concat_ws(string0, array(varchar)) → varchar
描述:将数组中的元素以string0为分隔符进行串联。如果string0为null,则返回值为null。数组中的任何null值都将被跳过。
select concat_ws(NULL,ARRAY['abc']);--NULL select concat_ws(',',ARRAY['abc',NULL,NULL,'xyz']); -- abc,xyz select concat_ws(',',ARRAY['hello','world']); -- hello,world
- decode(binary bin, string charset) →varchar
描述:根据给定的字符集将第一个参数编码为字符串,支持的字符集包括('UTF-8', 'UTF-16BE', 'UTF-16LE', 'UTF-16'),当第一个参数为null,将返回null。
select decode(X'70 61 6e 64 61','UTF-8'); _col0 ------- panda (1 row) select decode(X'00 70 00 61 00 6e 00 64 00 61','UTF-16BE'); _col0 ------- panda (1 row)
- encode(string str, string charset) →binary
select encode('panda','UTF-8'); _col0 ---------------- 70 61 6e 64 61 (1 row)
- find_in_set (string str, string strList) →int
描述:返回str在逗号分隔的strList中第一次出现的位置。当有参数为null时,返回值也为null。
select find_in_set('ab', 'abc,b,ab,c,def'); -- 3
- format_number(number x, int d) →string
描述:将数字x格式化为'#,###,###.##',保留d位小数,以字符串的形式返回结果。
select format_number(541211.212,2); -- 541,211.21
- format(format,args...) → varchar
描述:参见Format。
- locate(string substr, string str, int pos]) →int
描述:返回子串在字符串的第pos位后第一次出现的位置。没有满足条件的返回0。
select locate('aaa','bbaaaaa',6);-- 0 select locate('aaa','bbaaaaa',1);-- 3 select locate('aaa','bbaaaaa',4);-- 4
- length(string) → bigint
select length('hello');-- 5
- levenshtein_distance(string1, string2) → bigint
描述:计算string1和string2的Levenshtein距离,即将string转为string2所需要的单字符编辑(包括插入、删除或替换)最少次数。
select levenshtein_distance('helo word','hello,world'); -- 3
- hamming_distance(string1, string2) → bigint
描述:返回字符串1和字符串2的汉明距离,即对应位置字符不同的数量。 请注意,两个字符串的长度必须相同。
select hamming_distance('abcde','edcba');-- 4
- instr(string,substring) → bigint
- levenshtein(string1, string2) → bigint 参考levenshtein_distance(string1, string2)
- levenshtein_distance(string1, string2) → bigint
描述:返回字符串1和字符串2的Levenshtein编辑距离,即将字符串1更改为字符串2所需的最小单字符编辑(插入,删除或替换)次数。
select levenshtein_distance('apple','epplea');-- 2
- lower(string) → varchar
select lower('HELLo!');-- hello!
- lcase(string A) → varchar
- luhn_check(string) → boolean
这种校验和函数,也称为模10,广泛应用于信用卡号码和政府身份证号码,以区分有效号码和键入错误、错误的号码。
select luhn_check('79927398713'); -- true select luhn_check('79927398714'); -- false
- octet_length(string str) → int
select octet_length('query');--5
- parse_url(string urlString, string partToExtract [, string keyToExtract]) →string
描述:返回URL的指定部分。partToExtract参数有效值包括:HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE和USERINFO。keyToExtract为可选参数,用于选取QUERY中的key对应的值。
select parse_url('https://www.example.com/index.html','HOST'); _col0 ---------- www.example.com (1 row) -- 查询URL中QUERY部分service对应的值 select parse_url('https://www.example.com/query/index.html?name=panda','QUERY','name'); _col0 ------- panda (1 row)
- position(substring IN string) →bigint
描述:返回子串在父串中第一次出现的位置
select position('ab' in 'sssababa');-- 4
- quote(String text) → string
select quote('DONT');-- 'DONT' select quote(NULL);-- NULL
- repeat2(string str, int n) → string
select repeat2('abc',4); _col0 -------------- abcabcabcabc (1 row)
- reverse(string) → varchar
select reverse('hello');-- olleh
- rpad(string, size, padstring) → varchar
描述:右填充字符串以使用padstring调整字符大小。如果size小于字符串的长度,则结果将被截断为size个字符。大小不能为负,并且填充字符串必须为非空。
select rpad('myk',5,'dog'); -- mykdo
- rtrim(string) → varchar
select rtrim('hello world! ');-- hello world!
- space(int n) → varchar
select space(4); _col0 ------- (1 row) select length(space(4)); _col0 ------- 4 (1 row)
- split(string, delimiter) → array
描述:将字符串按限定符(delimiter)分隔为一个array。
select split('a:b:c:d',':');-- [a, b, c, d]
- split(string, delimiter, limit) → array
描述:将字符串按delimiter分割为一个array,元素个数为limit。最后一个元素包含了最后一个字符串后面所有的字符。Limit 必须是个数字。
select split('a:b:c:d',':',2);-- [a, b:c:d] select split('a:b:c:d',':',4);-- [a, b, c, d]
- split_part(string, delimiter, index) → varchar
描述:将字符串按delimiter分隔为一个array,并取出索引值为index的元素。index从1开始,如果index超过了数组长度,则返回null。
select split_part('a:b:c:d',':',2); -- b select split_part('a:b:c:d',':',5); -- NULL
- split_to_map (string, entryDelimiter, keyValueDelimiter) → map<varchar, varchar>
描述:将字符串按entryDelimiter分割为Map的键值对,而每个键值对又按照keyValueDelimiter来区分Key和Value。
select split_to_map('li:18,wang:17',',',':');--{wang=17, li=18}
- split_to_multimap(string, entryDelimiter, keyValueDelimiter) -> map(varchar, array(varchar)
描述:将字符串按照entryDelimiter和keyValueDelimiter分割,返回一个map,每个key对应一个类型为array的value。其中,entryDelimiter将字符串分割为键值对,keyValueDelimiter将键值对分割为Key和Value。
select split_to_multimap('li:18,wang:17,li:19,wang:18',',',':');--{wang=[17, 18], li=[18, 19]}
- strpos(string, substring) → bigint
描述:返回字符串中第一次出现substring的位置。从1开始,如果未找到,返回0。举例:
select strpos('hello world!','l'); --3 select strpos('hello world!','da'); --0
- str_to_map() 参考split_to_map()
- substr(string, start, length) → varchar
描述:从start位置开始截取字符串,截取的长度为length。
一般用于截取时间戳格式。
Select substr('2019-03-10 10:00:00',1,10); --截取到日 2019-03-10 Select substr('2019-03-10 10:00:00',1,7); --截取到月 2019-03
- substring(string, start) → varchar
- substring_index(string A, string delim, int count) → varchar
描述:当count为正数时,返回从左边开始计数的第count个分隔符delim左边的所有内容。当count为负数时,返回从右边开始计数的第count个分隔符delim右侧的所有内容。
select substring_index('one.two.three','.',2); _col0 ----------------- one.two (1 row) select substring_index('one.two.three','.',-2); _col0 ----------------- two.three (1 row) select substring_index('one.two.three','.',0); _col0 ------- NULL (1 row)
- soundex(string A) →varchar
描述:SOUNDEX返回由四个字符组成的代码(SOUNDEX)以评估两个字符串在发音时的相似性。规则如下:
表1 字符对应规则 字符
对应数字
a、e、h、i、o、u、w、y
0
b、f、p、v
1
c、g、j、k、q、s、x、z
2
d、t
3
l
4
m、n
5
r
6
- 提取字符串的首字母作为soundex的第一个值。
- 按照上面的字母对应规则,将后面的字母逐个替换为数字。如果有连续的相等的数字,只保留一个,其余的都删除掉,并去除所有的0。
- 如果结果超过4位,取前四位。如果结果不足4位向后补0。
select soundex('Miller'); _col0 ------- M460 (1 row)
- translate(string|char|varchar input, string|char|varchar from, string|char|varchar to) →varchar
描述:对于input字符串,将其中的参数from指代字符串替换为参数to指代的字符串。三个参数有一个为NULL,则结果返回NULL。
select translate('aabbcc','bb','BB'); _col0 -------- aaBBcc (1 row)
- upper(string) → varchar
select upper('heLLo');-- HELLO
- ucase(string A) → varchar
- base64decode(STRING str)
SELECT to_base64(CAST('hello world' as varbinary));-- aGVsbG8gd29ybGQ= select base64decode('aGVsbG8gd29ybGQ=');-- hello world
- jaro_distance(STRING str1, STRING str2)
select JARO_DISTANCE('hello', 'hell');-- 0.9333333333333332
- FNV_HASH(type v)
select FNV_HASH('hello');-- -6615550055289275125
- word_stem(word) → varchar
select word_stem('greating');-- great
- word_stem(word, lang) → varchar
描述:返回指定语种单词中的词干。
select word_stem('ultramoderne','fr');-- ultramodern
- translate(source, from, to) → varchar
描述:通过将源字符串中找到的字符替换为目标字符串中的相应字符来返回翻译后的源字符串。如果from字符串包含重复项,则仅使用第一个。如果源字符在from字符串中不存在,则将复制源字符而不进行翻译。如果在from字符串中匹配字符的索引超出了to字符串的长度,则将从结果字符串中省略源字符。
SELECT translate('abcd', '', ''); -- 'abcd' SELECT translate('abcd', 'a', 'z'); -- 'zbcd' SELECT translate('abcda', 'a', 'z'); -- 'zbcdz' SELECT translate('Palhoça', 'ç','c'); -- 'Palhoca' SELECT translate('abcd', 'a', ''); -- 'bcd' SELECT translate('abcd', 'a', 'zy'); -- 'zbcd' SELECT translate('abcd', 'ac', 'z'); -- 'zbd' SELECT translate('abcd', 'aac', 'zq'); -- 'zbd'
- normalize(string) → varchar
select normalize('e'); _col0 ------- e (1 row)
- normalize(string, form) → varchar
描述:Unicode允许你用不同的字节来写相同的字符,例如é和é,第一个是由0xC3 0xA9这两个字节组成的,第二个是由0x65 0xCC 0x81这三个字节组成的。
normalize()将根据参数form给定的Unicode规范化形式 (包括NFC、NFD、NFKC、NFKD)返回标准字符串,如未指定参数,默认使用NFC。
select to_utf8('é'); _col0 ------- c3 a9 (1 row) select to_utf8('é'); _col0 ---------- 65 cc 81 (1 row) select normalize('é',NFC)=normalize('é',NFC); _col0 ------- true (1 row)
- to_utf8(string) → varbinary
select to_utf8('panda'); _col0 ---------------- 70 61 6e 64 61 (1 row)
- from_utf8(binary) → varchar
描述:将一个二进制串编码为UTF-8格式字符串。无效的UTF-8序列将被Unicode字符U+FFFD替换。
select from_utf8(X'70 61 6e 64 61'); _col0 ------- panda (1 row)
- from_utf8(binary, replace) → varchar
描述:将一个二进制串编码为UTF-8格式字符串。无效的UTF-8序列将被参数replace替换。参数replace必须为单个字符或空(以免无效字符被移除)。
select from_utf8(X'70 61 6e 64 61 b1','!'); _col0 -------- panda! (1 row)