DLC 对 Hive 函数有完善的支持,您可以轻松地从 Hive 升级到数据湖计算 DLC,使用更强大的数据湖特性。
DLC 统一函数与 Hive 函数存在部分细微差别,具体函数对照表如下。
数学函数
Hive3.1函数名称 | 函数功能描述 | DLC 函数名称 | 差异表述 | 使用参考 |
round | 四舍五入取整 | 无差异 | select round(1.23); | |
round | 保留指定位数小数四舍五入 | 无差异 | select round(1.234,2); | |
bround | HALF_EVEN 模式下的四舍五入 | DLC 函数中 bround 需要传入2个参数,其中第2个参数指定保留的小数位。将第二个参数置为0,效果等同 hive 中的 bround(double a) | select bround(1.237,0); | |
bround | HALF_EVEN 模式下的四舍五入,保留指定的小数位 | 无差异 | select bround(1.237,2); | |
floor | 向下取整 | 无差异 | select floor(1.23); | |
ceil, ceiling | 向上取整 | 无差异 | select ceil(1.93); select ceiling(1.13); | |
rand | 返回一个0到1范围内的随机数。如果指定种子 seed,则会等到一个稳定的随机数序列 | 无差异 | select rand(); select rand(5); | |
exp | e 的 a 次方 | 无差异 | select exp(1); select exp(2.4); | |
ln | 自然对数函数 | 无差异 | select ln(2.4); | |
log10 | 以10为底的对数函数 | 无差异 | select log10(2.4); | |
log2 | 以2为底的对数函数 | 无差异 | select log2(2.4); | |
log | 对数函数 | 无差异 | select log(2,4); | |
pow, power | 次方函数 | 无差异 | select pow(2,4); | |
sqrt | 开方函数 | 无差异 | select sqrt(4); | |
bin | 二进制函数 | 无差异 | select bin(4); | |
hex | 十六进制函数 | 无差异 | select hex(10); | |
unhex | 十六进制转string | DLC Spark 函数中需要对结果进行 decode | select decode(unhex('3141'), 'UTF-8'); | |
conv | 进制转化 | 无差异 | select conv(2,10,2); | |
abs | 取绝对值 | 无差异 | select abs(-1); | |
pmod | 取模 | 无差异 | select pmod(5,3); | |
sin | 三角函数 sin,a 为弧度 | 无差异 | select sin(3.14); | |
asin | 三角函数 arc sin,a 为弧度 | 无差异 | select asin(0.5); | |
cos | 三角函数 cos,a 为弧度 | 无差异 | select cos(3.14); | |
acos | 三角函数arc cos,a 为弧度 | 无差异 | select acos(1); | |
tan | 三角函数 tan,a 为弧度 | 无差异 | select tan(3.14); | |
atan | 三角函数 arc tan,a 为弧度 | 无差异 | select atan(1); | |
degrees | 弧度转角度 | 无差异 | select degrees(3.14); | |
radians | 角度转弧度 | 无差异 | select radians(180); | |
positive | 返回 a | 无差异 | select positive(-1); | |
negative | 返回 -a | 无差异 | select negative(1); | |
sign | 如果 a 为正数,则返回1.0;如果 a 为负数,则返回-1.0; 如果 a 为0,则返回0.0 | 无差异 | select sign(1.12); | |
e | 返回自然常数 e | 无差异 | select e(); | |
pi | 返回圆周率 pi | 无差异 | select pi(); | |
factorial | 阶乘 | 无差异 | select factorial(5); | |
cbrt | 立方根 | 无差异 | select cbrt(27); | |
shiftleft | 左移位 | 无差异 | select shiftleft(3,1); | |
shiftright | 右移位 | 无差异 | select shiftright(3,1); | |
shiftrightunsigned | 无符号右移位 | 无差异 | select shiftrightunsigned(3,1); | |
greatest | 返回最大值 | 当参数中有 null 值时,DLC 函数对 null 值不做计算,返回除 null 之外最大值,Hive 函数会返回 null | select greatest(1,2,3.3); | |
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 集合函数无差异。
Hive3.1函数名称 | 函数功能描述 | DLC 函数名称 | 差异表述 | 使用参考 |
size | 返回 map / array 的大小 | 无差异 | select size(str_to_map('a:1,b:2')); | |
map_keys | 返回 map 的 key 值列表 | 无差异 | 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 | 将输入的参数转换为二进制数组 | 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 | 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。 | 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 | 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 | 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。 | 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个小时。 | 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分钟。 | 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秒。 | 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 字段 | 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 | 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。 | 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。 | 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。 | 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。 | 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(例如年、季度、月、周等)缩短后的第一天的日期,例如所在季度的第一天,所在月份的第一天,所在周的第一天等。 | 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 | 任意一个入参为 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 | 判断条件为 NULL 时,HIVE 认为判断条件为假,而 DLC 会报错 | select if(1<2, 12, 'false') | |
isnull | 如果 a 为 NULL,则返回 true,否则返回 false | 无差异 | select isnull('false') | |
isnotnull | 如果 a 不是 NULL,则返回 true,否则返回 false | 无差异 | select isnotnull('false') | |
nvl | 如果值为 NULL,则返回第二个参数 | 无差异 | select nvl(NULL, 'false') select nvl(1, 'false') | |
coalesce | 返回第一个非 NULL 的参数 | 无差异 | 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 | 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 的第一个字符串的数值 | 无差异 | select ascii('222'); | |
base64 | 将参数从二进制转换为 base64字符串 | 无差异 | select base64('tencent'); | |
character_length | 返回 str 中包含的 UTF-8字符数 | 无差异 | select char_length(binary('tencent')); | |
chr | 返回具有等效于 A 的二进制字符 | 无差异 | select chr(65); | |
concat | 返回按顺序串联作为参数传递的字符串或字节所产生的字符串或字节 | 无差异 | select concat('Spark', 'SQL'); | |
context_ngrams | 给定一个 contextual N-grams,从一组标记化的句子中返回前 k 个上下文 N-gram | 无差异 | - | |
concat_ws | 返回由 sep 分隔的字符串 | 无差异 | select concat_ws(' ', 'tencent', 'dlc'); | |
decode | 使用提供的字符集(“US-ASCII”、“ISO-8859-1”、“UTF-8”、“UTF-16BE”、“UTF-16LE”、“UTF-16”之一)将第一个参数解码为字符串。如果任一参数为空,结果也将为空。 | 无差异 | select decode(encode('abc', 'utf-8'), 'utf-8'); | |
elt | 返回索引号的字符串。例如,elt(2,'hello','world')返回'world'。如果 N 小于1或大于参数,则返回NULL。 | 无差异 | select elt(1, 'scala', 'java'); | |
encode | 使用提供的字符集(“US-ASCII”、“ISO-8859-1”、“UTF-8”、“UTF-16BE”、“UTF-16LE”、“UTF-16”之一)将第一个参数编码为二进制。如果任一参数为 Null,结果也将为 Null | 无差异 | 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。 | 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开始计数) | 无差异 | select instr('SparkSQL', 'SQL'); | |
length | 返回字符串的长度 | 无差异 | select length('Spark SQL '); | |
locate | 返回位置pos之后str中substr首次出现的位置。 | 无差异 | select locate('bar', 'foobarbar'); | |
lower | 返回将B的所有字符转换为小写产生的字符串 | 无差异 | select lower('TENCENT'); | |
lpad | lpad(string str, int len, string pad) 将字符串 str 左侧填充字符 pad,使其长度达到 len。如果 str 的长度大于 len,则返回值将被截断为 len 个字符。如果填充字符 pad 为空,则返回值为 null。 | DLC sparksql 引擎中 pad 为可选参数, pad 默认为空格 | select lpad('hi', 5, '??'); | |
ltrim | 返回从输入字符串的开头(左侧)修剪空格产生的字符串 | 无差异 | select ltrim(' SparkSQL '); | |
ngrams | 返回一组标记化句子中的前 k 个 N-grams。 | 无差异 | - | |
octet_length | 返回字符串数据的字节长度或二进制数据的字节数。 | 无差异 | select octet_length('Spark SQL'); | |
parse_url | 从 url 中提取 path | 无差异 | select parse_url('http://spark.apache.org/path?query=1', 'HOST'); | |
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 次的字符串 | 无差异 | select repeat('123', 2); | |
replace | replace(string A, string OLD, string NEW) 返回将字符串A中所有不重叠的 OLD 出现替换为NEW后得到的字符串。 | sparksql 引擎中第三个参数 NEW 为可选参数,默认为空 | select replace('ABCabc', 'abc', 'DEF'); | |
reverse | reverse(string A) 返回反转后的字符串。 | sparksql 引擎中参数可以是 array | select reverse('Spark SQL'); | |
rpad | rpad(string str, int len, string pad) 将字符串 str 右侧填充字符 pad,使其长度达到 len。如果 str 的长度大于 len,则返回值将被截断为 len 个字符。如果填充字符 pad 为空,则返回值为 null。 | sparksql 引擎中 pad 为可选参数,pad 默认为空格 | select rpad('hi', 5, '??'); | |
rtrim | 返回从输入字符串的末端(右侧)修剪空格产生的字符串 | 无差异 | select rtrim(' SparkSQL '); | |
sentences | 将输入字符串 str 拆分为一个单词数组 | 无差异 | select sentences('Hi there! Good morning.'); | |
space | 返回一个由 n 个空格组成的字符串 | 无差异 | select concat(space(2), '1'); | |
split | split(string str, string pat) 围绕正则表达式 pat(pat 是一个正则表达式)拆分字符串 str。 | 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 的字节数组切片 | 无差异 | select substr('Spark SQL', 5); | |
substring | 返回从 pos 开始且长度为 len 的 str 子字符串,或从 pos 开始且长度为 len 的字节数组切片。 | 无差异 | select substring('Spark SQL', 5); | |
substring_index | 在 delim 的出现 count 之前,从 str 返回子字符串。如果 count 为正数,则返回最后定界符左侧的所有内容(从左侧计数)。如果计数为负数,则返回最终定界符右侧的所有内容(从右侧计数)。该函数在匹配 delim 时区分大小写。 | 无差异 | select substring_index('cloud.tencent.com', '.', 2); | |
translate | 通过将 from 字符串中的字符替换为 to 字符串中的相应字符来转换 input 字符串 | 无差异 | select translate('AaBbCc', 'abc', '123'); | |
trim | 返回从输入字符串的两端修剪空格产生的字符串 | DLC SparkSQL 引擎支持更复杂的修剪表达式 | select trim(' SparkSQL '); | |
unbase64 | 将 str 从 base64字符串转换为二进制 | 无差异 | select unbase64('U3BhcmsgU1FM'); | |
upper | 返回所有字符都改为大写的 str | 无差异 | select upper('tencent'); | |
ucase | 返回所有字符都改为大写的 str | 无差异 | select ucase('SparkSQL'); | |
initcap | 每个单词的第一个字母都改为大写,所有其他字母均为小写。 | 无差异 | select initcap('sPark sql'); | |
levenshtein(string A, string B) | 返回两个给定字符串之间的 Levenshtein 距离 | 无差异 | select levenshtein('kitten', 'sitting'); | |
soundex(string A) | 返回字符串的 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 | 返回参数的散列值 | 不同引擎计算方式不一致,可能得到不同结果 | select hash('tencent', array(123), 2); | |
current_user | 返回当前用户 | 无差异 | select current_user(); | |
logged_in_user | 从会话状态返回当前用户名。这是连接到 Hive 时提供的用户名。 | 不支持 | - | - |
current_database | 返回当前数据库名称 | 不支持 | - | - |
md5 | 以十六进制字符串形式返回 MD5 128位校验和 | 无差异 | select md5('tencent'); | |
sha1 | 以十六进制字符串形式返回输入参数的 sha1哈希值 | 无差异 | select sha1('tencent'); | |
sha | 以十六进制字符串形式返回输入参数的 sha1哈希值 | 无差异 | select sha('tencent'); | |
crc32 | 使用 CRC32算法计算表达式的循环冗余校验值 | 无差异 | select crc32('tencent'); | |
sha2 | 以十六进制字符串形式返回 expr 的 SHA-2族的校验和。支持 SHA-224、SHA-256、SHA-384和 SHA-512。位长度0等于256 | 无差异 | 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() 返回引擎版本 | sparksql 返回 spark 版本, presto 返回 hive版本 | select version(); | |
surrogate_key | surrogate_key([write_id_bits, task_id_bits]) 在向表中插入数据时自动生成数字 ID。只能用作 ACID 或仅插入表的默认值。 | 不支持 | - | - |