数据湖计算 DLC Hive 函数对照

DLC 对 Hive 函数有完善的支持,可以以轻松地从 Hive 升级到数据湖计算 DLC,使用更强大的数据湖特性。DLC 统一函数与 Hive 函数存在部分细微差别,具体函数对照表如下。

相关产品
数据湖计算 DLC 产品页,含版本规格、价格与购买入口。

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 向上取整 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 次方函数 pow, power 无差异 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 右移位 shiftright 无差异 select shiftright(3,1);
shiftrightunsigned 无符号右移位 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 个相同大小的桶,返回当前值所在的桶编号 width_bucket 无差异 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 值列表 map_values 无差异 select map_values(str_to_map('a:1,b:2'));
array_contains array 中是否包含 value array_contains 无差异 select array_contains(split('a,b',','),'a');
sort_array 升序排列 array 中的元素 sort_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,时区为当前系统定义的时区。 from_unixtime 无差异 select from_unixtime(12458456)select from_unixtime(100, 'yyyyMMdd HH:mm:ssZ')
unix_timestamp 指定一个时间,或默认为当前时间,返回从1970-01-01 00:00:00 UTC 开始到指定时间的秒数。 unix_timestamp 无差异 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天。 day/dayofmonth 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周 weekofyear 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。 from_utc_timestamp 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。 to_utc_timestamp 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 获取当前日期 current_date 无差异 select current_date()
current_timestamp 获取当前时间 current_timestamp 无差异 select current_timestamp()
add_months 计算指定的日期(或时间)加上指定月数后的日期。输入为 NULL,则返回 NULL。 add_months 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 返回的是时间。 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。 months_between 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_format 当 date 时间或日期格式不对,或者 fmt 模板格式不对时,HIVE 返回 NULL,而 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 assert_true 无差异 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字符数 character_length 无差异 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 context_ngrams 无差异 –
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。 find_in_set 无差异 select find_in_set('ab','abc,b,ab,c,def');
format_number 将输入的参数格式化为'#,###,###.##',四舍五入到 D 小数位,并以字符串形式返回结果。 format_number 无差异 select format_number(12332.123456, 4);
get_json_object 提取 json 对象 get_json_object 无差异 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 返回字符串数据的字节长度或二进制数据的字节数。 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 组 x 组索引 idx 的第一个字符串 regexp_extract 无差异 select regexp_extract('100-200', '(\\\\d+)-(\\\\d+)', 1);
regexp_replace regexp_replace(string INITIAL_STRING, string PATTERN, string REPLACEMENT)返回将 INITIAL_STRING 中与 PATTERN 中定义的 Java 正则表达式语法匹配的所有子字符串替换为 REPLACEMENT 实例后得到的字符串。 regexp_replace 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。 str_to_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 时区分大小写。 substring_index 无差异 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 距离 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 返回当前用户 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。位长度分别为224、256、384或512 sha2 无差异 select sha2('tencent', 256);
aes_encrypt aes_encrypt(input string/binary, key string/binary)使用 aes 加密 aes_encrypt DLC 中 Spark SQL 引擎不支持该函数 select hex(aes_encrypt('tencent', '0000111122223333'));
aes_decrypt aes_decrypt(input binary, key string/binary)使用 AES 解密 aes_decrypt DLC 中 Spark SQL 引擎不支持该函数 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 或仅插入表的默认值。 不支持 – –
赞 (0)
上一篇 4天前
下一篇 4天前