有奖:语音产品征文挑战赛火热进行中> HOT
DLC 对 Hive 函数有完善的支持,您可以轻松地从 Hive 升级到数据湖计算 DLC,使用更强大的数据湖特性。
DLC 统一函数与 Hive 函数存在部分细微差别,具体函数对照表如下。
Hive 函数详情可以参考 Apache Hive 官网LanguageManual UDF

数学函数

Hive 数学函数可参考 Apache Hive 官网 MathematicalFunctions
DLC 数学函数请参见腾讯云官网文档 数学函数
Hive3.1函数名称
函数功能描述
DLC 函数名称
差异表述
使用参考
round
四舍五入取整
round
无差异
select round(1.23);
round
保留指定位数小数四舍五入
round
无差异
select round(1.234,2);
bround
HALF_EVEN 模式下的四舍五入
bround
DLC 函数中 bround 需要传入2个参数,其中第2个参数指定保留的小数位。将第二个参数置为0,效果等同 hive 中的 bround(double a)
select bround(1.237,0);
bround
HALF_EVEN 模式下的四舍五入,保留指定的小数位
bround
无差异
select bround(1.237,2);
floor
向下取整
floor
无差异
select floor(1.23);
ceil, ceiling
向上取整
无差异
select ceil(1.93);
select ceiling(1.13);
rand
返回一个0到1范围内的随机数。如果指定种子 seed,则会等到一个稳定的随机数序列
rand
无差异
select rand();
select rand(5);
exp
e 的 a 次方
exp
无差异
select exp(1);
select exp(2.4);
ln
自然对数函数
ln
无差异
select ln(2.4);
log10
以10为底的对数函数
log10
无差异
select log10(2.4);
log2
以2为底的对数函数
log2
无差异
select log2(2.4);
log
对数函数
log
无差异
select log(2,4);
pow, power
次方函数
powpower
无差异
select pow(2,4);
sqrt
开方函数
sqrt
无差异
select sqrt(4);
bin
二进制函数
bin
无差异
select bin(4);
hex
十六进制函数
hex
无差异
select hex(10);
unhex
十六进制转string
unhex
DLC Spark 函数中需要对结果进行 decode
select decode(unhex('3141'), 'UTF-8');
conv
进制转化
conv
无差异
select conv(2,10,2);
abs
取绝对值
abs
无差异
select abs(-1);
pmod
取模
pmod
无差异
select pmod(5,3);
sin
三角函数 sin,a 为弧度
sin
无差异
select sin(3.14);
asin
三角函数 arc sin,a 为弧度
asin
无差异
select asin(0.5);
cos
三角函数 cos,a 为弧度
cos
无差异
select cos(3.14);
acos
三角函数arc cos,a 为弧度
acos
无差异
select acos(1);
tan
三角函数 tan,a 为弧度
tan
无差异
select tan(3.14);
atan
三角函数 arc tan,a 为弧度
atan
无差异
select atan(1);
degrees
弧度转角度
degrees
无差异
select degrees(3.14);
radians
角度转弧度
radians
无差异
select radians(180);
positive
返回 a
positive
无差异
select positive(-1);
negative
返回 -a
negative
无差异
select negative(1);
sign
如果 a 为正数,则返回1.0;如果 a 为负数,则返回-1.0;
如果 a 为0,则返回0.0
sign
无差异
select sign(1.12);
e
返回自然常数 e
e
无差异
select e();
pi
返回圆周率 pi
pi
无差异
select pi();
factorial
阶乘
factorial
无差异
select factorial(5);
cbrt
立方根
cbrt
无差异
select cbrt(27);
shiftleft
左移位
shiftleft
无差异
select shiftleft(3,1);
shiftright
右移位
无差异
select shiftright(3,1);
shiftrightunsigned
无符号右移位
无差异
select shiftrightunsigned(3,1);
greatest
返回最大值
greatest
当参数中有 null 值时,DLC 函数对 null 值不做计算,返回除 null 之外最大值,Hive 函数会返回 null
select greatest(1,2,3.3);
least
返回最小值
least
当参数中有 null 值时,DLC 函数对 null 值不做计算,返回除 null 之外最小值,Hive 函数会返回 null
select least(1,2,3.3);
width_bucket
分桶值,按 min_value/max_value 创建 num_buckets+1 个相同大小的桶,返回当前值所在的桶编号
无差异
select width_bucket(10,1,20,2);

集合函数

DLC 集合函数与 Hive 集合函数无差异。
Hive 集合函数可参考 Apache Hive 官网 CollectionFunctions
DLC 集合函数请参见腾讯云官网文档 集合函数
Hive3.1函数名称
函数功能描述
DLC 函数名称
差异表述
使用参考
size
返回 map / array 的大小
size
无差异
select size(str_to_map('a:1,b:2'));
map_keys
返回 map 的 key 值列表
map_keys
无差异
select map_keys(str_to_map('a:1,b:2'));
map_values
返回 map 的 value 值列表
无差异
select map_values(str_to_map('a:1,b:2'));
array_contains
array 中是否包含 value
无差异
select array_contains(split('a,b',','),'a');
sort_array
升序排列 array 中的元素
无差异
select sort_array(split('1,3,2',','));

类型转化函数

Hive3.1函数名称
函数功能描述
DLC 函数名称
差异表述
使用参考
binary
将输入的参数转换为二进制数组
binary
Hive3.1入参仅支持 string 和 binary;DLC 支持 string、int、long 和 binary入参
Hive3.2的出参会转换为 string展示,而 DLC 的出参是二进制数组,不会转 string
select binary('testString')
select binary(1)(HIVE 不支持)
select binary(inputCol) from inputTable(HIVE 不支持)
cast
将输入的参数转强制转换为指定 type 类型。
如果给定的表达式或值无法强制转换为指定类型则会报错,例如字符串转 long 错误:Cast function cannot convert value of type VARCHAR(65536) to type LONG
cast
Hive3.1对强制转换失败的会返回 NULL,而 DLC 会报错
select cast('10' as int)select cast(inputCol as int) from inputTable

时间函数

Hive3.1函数名称
函数功能描述
DLC 对应函数名称
差异表述
使用参考
from_unixtime
将数字化的 Unix 时间(表示从1970-01-01 00:00:00 UTC 开始计数的秒数)转换为指定格式的字符串函数。
默认输出的时间格式为 yyyy-MM-dd HH:mm:ss,时区为当前系统定义的时区。
无差异
select from_unixtime(12458456)
select from_unixtime(100, 'yyyyMMdd HH:mm:ssZ')
unix_timestamp
指定一个时间,或默认为当前时间,返回从1970-01-01 00:00:00 UTC 开始到指定时间的秒数。
无差异
select unix_timestamp()
select unix_timestamp('2023-04-12 00:00:00')
select unix_timestamp('2023-04-12', 'yyyy-MM-dd')
to_date
指定一个时间,获取这个时间所在的日期。
例如2023-04-12 13:14:20所在的日期为2023-04-12。
to_date
HIVE 的 to_date 函数只能按指定格式 yyyy-MM-dd HH:mm:ss 输入,非指定格式的统一返回 NULL。
DLC 可以附加一个参数用于指定数据格式,从而使得输入的时间格式可以更灵活。
select to_date('2023-04-12 19:41:23')
select to_date('20230412 19:41', 'yyyy-MM-dd HH:mm')(HIVE 不支持)
select to_date('20230412 19:41', 'yyyyMMdd HH:mm')(HIVE 不支持)
year
指定一个时间,获取这个时间所在的年。
例如2023-04-12 13:14:20所在的天为2023
year
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select year('2023-04-12 19:41:25')
select year('2023-04')(HIVE 不支持)
quarter
指定一个时间,获取这个时间所在的季度。
例如2023-04-12 13:14:20所在的季度为2
quarter
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select quarter('2023-04-12 19:41')
select quarter('2023-04')(HIVE 不支持)
month
指定一个时间,获取这个时间所在的月。
例如2023-04-12 13:14:20所在的月为4。
month
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持yyyy或yyyy-MM格式。
当时间格式月份超过12时,HIVE 会计算和最后一个月的差值并取余,而 DLC 返回 NULL。
select month('2023-04-12 19:41')
select month('2023-04')(HIVE 不支持)
day/dayofmonth
指定一个时间,获取这个时间所在的天。
例如2023-04-12 13:14:20所在的月为当月第12天。
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
当时间格式中的天数超过了当月的天数,HIVE 会对当月天数取余,而 DLC 会返回 NULL。
select day('2023')(HIVE 不支持)
select dayofmonth('2023-04-12 19:41')
select day('2023-04-12 19:41')
hour
指定一个时间,获取这个时间所在的小时。
例如2023-04-12 13:14:20所在的月为第13个小时。
hour
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
当时间格式中的小时超过了23时,HIVE 会对23取余,而 DLC 会返回 NULL
select hour('2023-04-12 19:41')
select hour('2023-04')(HIVE 不支持)
minute
指定一个时间,获取这个时间所在的分钟。
例如2023-04-12 13:14:20所在的月为第14分钟。
minute
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
当时间格式中的分钟超过了59时,HIVE 会对60取余,而 DLC 会返回 NULL
select minute('2023-04-12 00:41')
select minute('2023-04')(HIVE 不支持)
second
指定一个时间,获取这个时间所在的秒。
例如2023-04-12 13:14:20所在的月为第20秒。
second
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持yyyy或yyyy-MM格式。
当时间格式中的秒超过了59时,HIVE 会对60取余,而 DLC 会返回 NULL
select second('2023-04-12 00:41:24')
select second('2023-04')(HIVE 不支持)
weekofyear
指定一个时间,返回指定时间在全年的第几周。
例如2023-04-12 13:14:20是2023年的第15周。
需要额外注意的是,当年的第一个周一,视为第一周的开始,如果日期时间在当年的第一个周一之前,会被认为是上一年的第52周。例如2023-01-01是周日,则weekofyear('2023-01-01')返回的是52,即上一年的第52周,而weekofyear('2023-01-02')则返回1,即当年的第1周
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select weekofyear('2023-04-12 00:41:25')
select weekofyear('2023-04')(HIVE 不支持)
extract
extract(field from source)从输入的 source 时间或时间间隔中抽取指定的 field 字段
extract
HIVE 和 DLC 版本目前不支持调整精度。
当 DATE 或 TIMESTAMP 标识符显式指定时,如果日期或时间格式不匹配,DLC 会报错,HIVE 会返回0。
HIVE 在计算 INTERNAL 的间隔时,如果 field 不在 source 中,会自动计算取余,DLC 则会报错。例如从间隔24个月中抽取年的字段,HIVE 会返回2年,DLC 则会报错字段不存在。
select extract(DAY FROM DATE '2023-04-12')
select extract(second from TIMESTAMP '2023-04-12 00:41:25')
select extract(month from interval '23-1' YEAR TO MONTH)
select extract(month from interval '23' MONTH)
select extract(year from interval '23' MONTH) (DLC 不支持)
select extract(hour from interval '23 13:23:34.34784' DAY TO SECOND)
datediff
计算从 startDate 到 endDate 所差的天数。如果 startDate 比 endDate 更迟,返回的是负数。
任意一个输入为 NULL,则返回 NULL
datediff
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持yyyy 或 yyyy-MM 格式。
select datediff('2021', '2022-10')(HIVE 不支持)
select datediff('2023-04-13', '2022-04-13 11:00:00')
from_utc_timestamp
给定一个 UTC 标准时间timestamp,将其转换为给定时区 timeZone 的时间。
任意一个输入为 NULL,则返回 NULL。
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
Hive 返回的是时间格式,字符串表示为 yyyy-MM-dd HH:mm:ss。
而 DLC 返回的是 UTC 标准表示,例如上海时区为 yyyy-MM-ddTHH:mm:ss+08:00。
select  from_utc_timestamp('2023-04', 'Asia/Seoul')
select from_utc_timestamp('2023-04-12 15:00:00', 'Asia/Shanghai')
to_utc_timestamp
给定一个时区 timeZone 的时间timestamp,转换为 UTC 标准时间 timestamp。
任意一个输入为 NULL,则返回 NULL。
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
Hive 返回的是时间格式,字符串表示为 yyyy-MM-dd HH:mm:ss。
而 DLC 返回的是 UTC 标准表示,例如上海时区为 yyyy-MM-ddTHH:mm:ss+08:00。
select to_utc_timestamp('2023-04-12 15:00:00', 'Asia/Shanghai')
select to_utc_timestamp('2023-04', 'Asia/Shanghai')(HIVE 不支持)
date_add
日期加法,给定 startDate 日期,返回加上 numDays 天后的日期。
numDays 可以是负数。
任意一个输入为 NULL,则返回 NULL。
date_add
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 可以支持 yyyy 或 yyyy-MM 格式。
select date_add('2023-04-12 15:00:00', 1)
select date_add('2023-04', -1)(HIVE 不支持)
date_sub
日期减法,给定 startDate 日期,返回减去 numDays 天后的日期。
numDays 可以是负数。
任意一个输入为 NULL,则返回 NULL。
date_sub
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select date_sub('2023-04-12 15:00:00', 1)
select date_sub('2023-04', -1)(HIVE 不支持)
current_date
获取当前日期
无差异
select current_date()
current_timestamp
获取当前时间
无差异
select current_timestamp()
add_months
计算指定的日期(或时间)加上指定月数后的日期。
输入为 NULL,则返回 NULL。
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select add_months('2023-04-12 15:00:00', 1)
select add_months('2023-04', -1)(HIVE 不支持)
last_day
计算指定的日期所在月的最后一天。
输入为 NULL,则返回 NULL。
last_day
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select last_day('2023-04-12 15:00:00')
select last_day('2023-04')(HIVE 不支持)
next_day
计算指定日期后第一个 day_of_week 的日期,day_of_week 表示周几,可选值从周一到周日。
任意一个输入为 NULL,则返回 NULL。
next_day
HIVE 的输入不支持 yyyy 或 yyyy-MM格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select next_day('2023-04-12 15:00:00')
select next_day('2023-04')(HIVE 不支持)
trunc
计算指定日期按 format(例如年、季度、月、周等)缩短后的第一天的日期,例如所在季度的第一天,所在月份的第一天,所在周的第一天等。
trunc
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
HIVE 不支持 WEEK 周。
select trunc('2023-04-12 15:00:00', 'MONTH')
select trunc('2023-04', 'YEAR')(HIVE 不支持)
-
计算指定日期按 format(例如年、季度、月、周等)缩短后的第一天的时间,例如所在季度的第一天的零点。和 trunc 方法的不同在于 date_trunc 返回的是时间。
HIVE 不支持该函数,可参考 trunc 函数。
select date_trunc('MM', '2023-04-12 15:00:00')
select date_trunc('SECOND', '2023-04-12 15:00:60')
months_between
计算 date1到 date2相差的月数。如果 date1<date2,则返回负数。
需要注意的是,计算时,每个月是按31天估算的,即分母为31。分子则为两个时间实际相差的精确到毫秒级别的时间差。最终计算的结果为小数。
任意一个入参为 NULL 时返回 NULL。
HIVE 的输入不支持 yyyy 或 yyyy-MM 格式,其他时间或日期格式都支持。
DLC 则可以支持 yyyy 或 yyyy-MM 格式。
select months_between('2023-04-12 15:00:00', '2023-04-12 15:00:00')
select months_between('2023-04', '2023-04-12 15:00:00')(HIVE 不支持)
date_format
按照指定的格式化模板 fmt(参考 Datetime Patterns for Formatting and Parsing),将输入的日期格式化。
任意一个入参为 NULL 时返回 NULL。
当 date 时间或日期格式不对,或者 fmt 模板格式不对时,HIVE 返回N ULL,而 DLC 会报错。
select date_format('2023-04-12 15:00:00', 'y')
select date_format('2023-04-12', 'yyyy-MM-dd HH:mm')

条件函数

Hive3.1函数名称
函数功能描述
DLC 函数名称
差异表述
使用参考
if
当条件为真时返回 valueTrue,否则返回 valueFalseOrNull
if
判断条件为 NULL 时,HIVE 认为判断条件为假,而 DLC 会报错
select if(1<2, 12, 'false')
isnull
如果 a 为 NULL,则返回 true,否则返回 false
isnull
无差异
select isnull('false')
isnotnull
如果 a 不是 NULL,则返回 true,否则返回 false
isnotnull
无差异
select isnotnull('false')
nvl
如果值为 NULL,则返回第二个参数
nvl
无差异
select nvl(NULL, 'false')
select nvl(1, 'false')
coalesce
返回第一个非 NULL 的参数
coalesce
无差异
select coalesce(NULL, 'false')
case/when
匹配判断
case/when
匹配选择的类型不相同时,HIVE 仅支持整型和字符串类型的隐式转换,而DLC 还可以支持 boolean 类型等的隐式转换。
select CASE 'c' WHEN 'a' THEN 1 WHEN 'b' THEN 2 ELSE 0 END;
select CASE WHEN 1 > 0 THEN 1 WHEN 2 > 0 THEN 2.0 ELSE 1.2 END;
nullif
如果参数 a=b,则返回 null,否则返回 a
nullif
HIVE 不支持第一个参数为 NULL,而DLC 可以支持任一参数为 NULL
select nullif(1, 'test');
select nullif(NULL, 'test');(HIVE不支持)
assert_true
如果“条件”不为真,则抛出异常,否则返回 null
无差异
select assert_true(1>0)

字符串函数

Hive3.1函数名称
函数功能描述
DLC 对应函数名称
差异表述
使用参考
ascii
返回 str 的第一个字符串的数值
ascii
无差异
select ascii('222');
base64
将参数从二进制转换为 base64字符串
base64
无差异
select base64('tencent');
character_length
返回 str 中包含的 UTF-8字符数
无差异
select char_length(binary('tencent'));
chr
返回具有等效于 A 的二进制字符
chr
无差异
select chr(65);
concat
返回按顺序串联作为参数传递的字符串或字节所产生的字符串或字节
concat
无差异
select concat('Spark', 'SQL');
context_ngrams
给定一个 contextual N-grams,从一组标记化的句子中返回前 k 个上下文 N-gram
无差异
-
concat_ws
返回由 sep 分隔的字符串
concat_ws
无差异
select concat_ws(' ', 'tencent', 'dlc');
decode
使用提供的字符集(“US-ASCII”、“ISO-8859-1”、“UTF-8”、“UTF-16BE”、“UTF-16LE”、“UTF-16”之一)将第一个参数解码为字符串。如果任一参数为空,结果也将为空。
decode
无差异
select decode(encode('abc', 'utf-8'), 'utf-8');
elt
返回索引号的字符串。例如,elt(2,'hello','world')返回'world'。如果 N 小于1或大于参数,则返回NULL。
elt
无差异
select elt(1, 'scala', 'java');
encode
使用提供的字符集(“US-ASCII”、“ISO-8859-1”、“UTF-8”、“UTF-16BE”、“UTF-16LE”、“UTF-16”之一)将第一个参数编码为二进制。如果任一参数为 Null,结果也将为 Null
encode
无差异
select encode('abc', 'utf-8');
field
field(val T,val1 T,val2 T,val3 T,...)
该函数返回在参数列表 val1,val2,val3,...中 val 的索引位置,如果未找到则返回0。例如,field('world','say','hello','world')返回3。
该函数支持所有基本数据类型,参数使用 str.equals(x)进行比较。
如果 val 为 NULL,则返回值为0。
field
DLC 函数中,仅presto 引擎支持
select field('world', 'say', 'hello', 'world');

find_in_set
返回逗号分隔列表 atr_array 中给定字符串 str 的索引(从1开始计数)。如果未找到字符串或 str 包含逗号,则返回0。
无差异
select find_in_set('ab','abc,b,ab,c,def');
format_number
将输入的参数格式化为'#,###,###.##',四舍五入到 D 小数位,并以字符串形式返回结果。
无差异
select format_number(12332.123456, 4);
get_json_object
提取 json 对象
无差异
select get_json_object('{"a":"b"}', '$.a');
in_file
in_file(string str, string filename)
如果字符串 str 在文件 filename 中作为整行出现,则返回 true。
不支持
-
-
instr
返回 str 中第一次出现 substr 的索引(从1开始计数)
instr
无差异
select instr('SparkSQL', 'SQL');
length
返回字符串的长度
length
无差异
select length('Spark SQL ');
locate
返回位置pos之后str中substr首次出现的位置。
locate
无差异
select locate('bar', 'foobarbar');
lower
返回将B的所有字符转换为小写产生的字符串
lower
无差异
select lower('TENCENT');
lpad
 lpad(string str, int len, string pad)
将字符串 str 左侧填充字符 pad,使其长度达到 len。如果 str 的长度大于 len,则返回值将被截断为 len 个字符。如果填充字符 pad 为空,则返回值为 null。
lpad
DLC sparksql 引擎中 pad 为可选参数, pad 默认为空格
select lpad('hi', 5, '??');
ltrim
返回从输入字符串的开头(左侧)修剪空格产生的字符串
ltrim
无差异
select ltrim(' SparkSQL ');
ngrams
返回一组标记化句子中的前 k 个 N-grams。
ngrams
无差异
-
octet_length
返回字符串数据的字节长度或二进制数据的字节数。
无差异
select octet_length('Spark SQL');
parse_url
从 url 中提取 path
parse_url
无差异
select parse_url('http://spark.apache.org/path?query=1', 'HOST');
printf
返回 printf 样式格式字符串中的格式化字符串
printf
无差异
select printf("Hello World %d %s", 100, "days");
quote
返回引号字符串
不支持
-
-
regexp_extract
提取str中与regexp表达式匹配并对应于regex组索引idx的第一个字符串
无差异
select regexp_extract('100-200', '(\\\\d+)-(\\\\d+)', 1);
regexp_replace
regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)
返回将 INITIAL_STRING 中与 PATTERN 中定义的 Java 正则表达式语法匹配的所有子字符串替换为 REPLACEMENT 实例后得到的字符串。
DLC sparksql 引擎中还可以加入第四个自选参数 position, position 是一个正整数字面量,表示在字符串中开始搜索的位置。默认值为1。
select regexp_replace('100-200', '(\\\\d+)', 'num');

repeat
返回将给定字符串重复 n 次的字符串
repeat
无差异
select repeat('123', 2);
replace
replace(string A, string OLD, string NEW)
返回将字符串A中所有不重叠的 OLD 出现替换为NEW后得到的字符串。
replace
sparksql 引擎中第三个参数 NEW 为可选参数,默认为空
select replace('ABCabc', 'abc', 'DEF');

reverse
reverse(string A)
返回反转后的字符串。
reverse
sparksql 引擎中参数可以是 array
select reverse('Spark SQL');

rpad
rpad(string str, int len, string pad)
将字符串 str 右侧填充字符 pad,使其长度达到 len。如果 str 的长度大于 len,则返回值将被截断为 len 个字符。如果填充字符 pad 为空,则返回值为 null。
rpad
sparksql 引擎中 pad 为可选参数,pad 默认为空格
select rpad('hi', 5, '??');

rtrim
返回从输入字符串的末端(右侧)修剪空格产生的字符串
rtrim
无差异
select rtrim(' SparkSQL ');
sentences
将输入字符串 str 拆分为一个单词数组
sentences
无差异
select sentences('Hi there! Good morning.');
space
返回一个由 n 个空格组成的字符串
space
无差异
select concat(space(2), '1');
split
split(string str, string pat)
围绕正则表达式 pat(pat 是一个正则表达式)拆分字符串 str。
split
DLC sparksql 引擎中有第三个可选参数 limit。limit 可以用以限制返回数组的长度。
select split('oneAtwoBthreeC', '[ABC]');

str_to_map
使用分隔符将输入参数拆分为键/值对后创建 map。
无差异
select str_to_map('a:1,b:2,c:3', ',', ':');
substr
返回从 pos 开始且长度为 len 的 str 子字符串,或从 pos 开始且长度为 len 的字节数组切片
substr
无差异
select substr('Spark SQL', 5);
substring
返回从 pos 开始且长度为 len 的 str 子字符串,或从 pos 开始且长度为 len 的字节数组切片。
substring
无差异
select substring('Spark SQL', 5);
substring_index
在 delim 的出现 count 之前,从 str 返回子字符串。如果 count 为正数,则返回最后定界符左侧的所有内容(从左侧计数)。如果计数为负数,则返回最终定界符右侧的所有内容(从右侧计数)。该函数在匹配 delim 时区分大小写。
无差异
select substring_index('cloud.tencent.com', '.', 2);
translate
通过将 from 字符串中的字符替换为 to 字符串中的相应字符来转换 input 字符串
translate
无差异
select translate('AaBbCc', 'abc', '123');
trim
返回从输入字符串的两端修剪空格产生的字符串
trim
DLC SparkSQL 引擎支持更复杂的修剪表达式
select trim(' SparkSQL ');
unbase64
将 str 从 base64字符串转换为二进制
unbase64
无差异
select unbase64('U3BhcmsgU1FM');
upper
返回所有字符都改为大写的 str
upper
无差异
select upper('tencent');
ucase
返回所有字符都改为大写的 str
ucase
无差异
select ucase('SparkSQL');
initcap
每个单词的第一个字母都改为大写,所有其他字母均为小写。
initcap
无差异
select initcap('sPark sql');
levenshtein(string A, string B)
返回两个给定字符串之间的 Levenshtein 距离
无差异
select levenshtein('kitten', 'sitting');
soundex(string A)
返回字符串的 Soundex 编码
soundex
无差异
select soundex('Miller');

数据屏蔽函数

Hive3.1函数名称
函数功能描述
DLC 对应函数名称
差异表述
使用参考
mask
mask(string str[, string upper[, string lower[, string number]]])
返回 str 的掩码版本。
不支持
-
-
mask_first_n
mask_first_n(string str[, int n])
返回 str 的掩码版本,其中前 n 个值被掩码替换。
不支持
-
-
mask_last_n
mask_last_n(string str[, int n])
返回 str 的掩码版本,其中最后 n 个值被掩码替换。
不支持
-
-
mask_show_first_n
mask_show_first_n(string str[, int n])
返回 str 的掩码版本,其中显示前 n 个字符未掩码替换。
不支持
-
-
mask_show_last_n
mask_show_last_n(string str[, int n])
返回 str 的掩码版本,其中显示前 n 个字符未掩码替换。
不支持
-
-
mask_hash
mask_hash(string|char|varchar str)
基于 str 返回一个哈希值。
不支持
-
-

其他函数

Hive3.1函数名称
函数功能描述
DLC 对应函数名称
差异表述
使用参考
java_method
reflect 的同义词
不支持
-
-
reflect
使用反射匹配参数签名来调用 Java 方法
不支持
-
-
hash
返回参数的散列值
hash
不同引擎计算方式不一致,可能得到不同结果
select hash('tencent', array(123), 2);
current_user
返回当前用户
无差异
select current_user();
logged_in_user
从会话状态返回当前用户名。这是连接到 Hive 时提供的用户名。
不支持
-
-
current_database
返回当前数据库名称
不支持
-
-
md5
以十六进制字符串形式返回 MD5 128位校验和
md5
无差异
select md5('tencent');
sha1
以十六进制字符串形式返回输入参数的 sha1哈希值
sha1
无差异
select sha1('tencent');
sha
以十六进制字符串形式返回输入参数的 sha1哈希值
sha
无差异
select sha('tencent');
crc32
使用 CRC32算法计算表达式的循环冗余校验值
crc32
无差异
select crc32('tencent');
sha2
以十六进制字符串形式返回 expr 的 SHA-2族的校验和。支持 SHA-224、SHA-256、SHA-384和 SHA-512。位长度0等于256
sha2
无差异
select sha2('tencent', 256);
aes_encrypt
aes_encrypt(input string/binary, key string/binary)
使用 aes 加密
DLC 中 sparksql 引擎不支持该函数
select hex(aes_encrypt('tencent', '0000111122223333'));

aes_decrypt
aes_decrypt(input binary, key string/binary)
使用 AES 解密
DLC 中 sparksql 引擎不支持该函数
select aes_decrypt(unhex('B99B99CE3359A736DBB9811ED8815C01'), '0000111122223333');
version
version()
返回引擎版本
version
sparksql 返回 spark 版本, presto 返回 hive版本
select version();
surrogate_key
surrogate_key([write_id_bits, task_id_bits])
在向表中插入数据时自动生成数字 ID。只能用作 ACID 或仅插入表的默认值。
不支持
-
-