| 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 对应函数名称 |
差异表述 |
使用参考 |
| 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'); |