详情见Hive官网
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
0 算数运算函数
运算符 | 描述 |
---|---|
A+B | A和B 相加 |
A-B | A减去B |
A*B | A和B 相乘 |
A/B | A除以B |
A%B | A对B取余 |
A&B | A和B按位取与 |
A|B | A和B按位取或 |
A^B | A和B按位取异或 |
~A | A按位取反 |
1 数值函数
函数名 | 用法 |
---|---|
ABS(x) | 返回x的绝对值 |
CEIL(x) | 返回不小于x的最小整数 |
FLOOR(x) | 返回不大于x的最大整数 |
ROUND(x) | 返回最接近x的整数 |
EXP(x) | 返回e的x次幂 |
LN(x) | 返回x的自然对数 |
LOG10(x) | 返回x的以10为底的对数 |
POWER(x, y) | 返回x的y次幂 |
SQRT(x) | 返回x的平方根 |
RAND() | 返回0到1之间的随机浮点数 |
SIGN(x) | 返回x的符号,1为正数,-1为负数,0为零 |
MOD(x, y) | 返回x除以y的余数 |
SIN(x) | 返回x的正弦值 |
COS(x) | 返回x的余弦值 |
TAN(x) | 返回x的正切值 |
ASIN(x) | 返回x的反正弦值 |
ACOS(x) | 返回x的反余弦值 |
ATAN(x) | 返回x的反正切值 |
RADIANS(x) | 将x从角度转换为弧度 |
DEGREES(x) | 将x从弧度转换为角度 |
2 字符串函数
函数名 | 用法 |
---|---|
CONCAT | CONCAT(string1, string2, …, stringN) 将多个字符串连接为一个字符串,参数为多个待连接的字符串。 |
LENGTH | LENGTH(string) 返回字符串的长度,单位为字符数。 |
LOWER | LOWER(string) 将字符串转换为小写。 |
UPPER | UPPER(string) 将字符串转换为大写。 |
TRIM | TRIM(string) 去除字符串两端的空白字符。 |
SUBSTRING | SUBSTRING(string, startIndex, length) 从字符串中截取指定位置和长度的子串,startIndex为起始位置,length为子串长度。 |
REPLACE | REPLACE(string, search, replace) 将字符串中的指定子串search替换为replace。 |
REGEXP_REPLACE | REGEXP_REPLACE(string, pattern, replacement) 使用正则表达式将字符串中匹配pattern的部分替换为replacement。 |
REGEXP_EXTRACT | REGEXP_EXTRACT(string, pattern) 使用正则表达式从字符串中提取匹配pattern的部分。 |
INSTR | INSTR(string, substring) 返回substring在字符串中第一次出现的位置,如果找不到则返回0。 |
INITCAP | INITCAP(string) 将字符串的首字母转换为大写,其余字母转换为小写。 |
CONCAT_WS | CONCAT_WS(separator, string1, string2, …, stringN) 将多个字符串使用指定的分隔符(separator)连接为一个字符串,参数为多个待连接的字符串。 |
LTRIM | LTRIM(string) 去除字符串左端的空白字符。 |
RTRIM | RTRIM(string) 去除字符串右端的空白字符。 |
REVERSE | REVERSE(string) 将字符串反转。 |
SPACE | SPACE(n) 返回由n个空格字符组成的字符串。 |
TRANSLATE | TRANSLATE(string, from, to) 将字符串中的字符从from替换为to,字符的对应关系通过对应位置上的字符映射实现。 |
3 日期函数
函数名 | 用法 |
---|---|
CURRENT_DATE | CURRENT_DATE() 返回当前日期(不包含时间部分),格式为’yyyy-MM-dd’。 |
CURRENT_TIMESTAMP | CURRENT_TIMESTAMP() 返回当前时间戳,包含日期和时间部分,格式为’yyyy-MM-dd HH:mm:ss’。 |
YEAR | YEAR(date) 返回日期中的年份部分。 |
MONTH | MONTH(date) 返回日期中的月份部分,取值范围为1~12。 |
DAY | DAY(date) 返回日期中的天数部分,取值范围为1~31。 |
HOUR | HOUR(timestamp) 返回时间戳中的小时部分,取值范围为0~23。 |
MINUTE | MINUTE(timestamp) 返回时间戳中的分钟部分,取值范围为0~59。 |
SECOND | SECOND(timestamp) 返回时间戳中的秒数部分,取值范围为0~59。 |
FROM_UNIXTIME | FROM_UNIXTIME(unixTime[, format]) 将Unix时间戳转换为日期字符串,可指定输出格式。 |
UNIX_TIMESTAMP | UNIX_TIMESTAMP([date[, pattern]]) 将日期字符串转换为Unix时间戳,可指定输入格式。 |
DATE_ADD | DATE_ADD(date, days) 将指定的天数(可为负数)加到日期上,返回新的日期。 |
DATE_SUB | DATE_SUB(date, days) 将指定的天数(可为负数)从日期中减去,返回新的日期。 |
DATEDIFF | DATEDIFF(endDate, startDate) 计算两个日期之间的天数差值。 |
TRUNC | TRUNC(date, format) 截断日期,将日期的时间部分置为0,可指定输出格式。 |
DATE_FORMAT | DATE_FORMAT(date, format) 将日期格式化为指定的字符串,可使用标准的日期格式模式。 |
ADD_MONTHS | ADD_MONTHS(date, numMonths) 将指定的月份数(可为负数)加到日期上,返回新的日期。 |
LAST_DAY | LAST_DAY(date) 返回日期所在月份的最后一天。 |
4 流程控制函数
函数名 | 用法 |
---|---|
IF(condition, value_if_true, value_if_false) | 如果condition为true,返回value_if_true,否则返回value_if_false。例如:IF(col1 > col2, ‘greater’, ‘less or equal’) |
CASE expr WHEN value1 THEN result1 [WHEN value2 THEN result2 …] [ELSE resultN] END | 类似于SQL中的CASE语句,根据expr的值匹配相应的value和result。例如:CASE WHEN col1 > 0 THEN ‘positive’ WHEN col1 < 0 THEN ‘negative’ ELSE ‘zero’ END |
COALESCE(value1, value2, …) | 返回第一个非NULL的值。例如:COALESCE(col1, col2, col3, ‘N/A’) |
NULLIF(expr1, expr2) | 如果expr1和expr2相等,则返回NULL,否则返回expr1。常用于处理除数为零的情况。例如:NULLIF(col1, 0) |
NVL(expr1, expr2) 或 IFNULL(expr1, expr2) | 如果expr1为NULL,则返回expr2,否则返回expr1。例如:NVL(col1, ‘unknown’) 或 IFNULL(col1, ‘unknown’) |
DECODE(expr, search1, result1, search2, result2, …, default) | 类似于CASE语句,根据expr的值匹配相应的search和result,如果没有匹配到,则返回default值。例如:DECODE(col1, 1, ‘one’, 2, ‘two’, ‘other’) |
5 集合函数
数名 | 用法 |
---|---|
COLLECT_LIST(expr) | 将表达式expr的值作为一个列表返回,可以用于合并同一分组内的多个行的值 |
COLLECT_SET(expr) | 将表达式expr的值作为一个集合返回,集合中不包含重复的值 |
SIZE(array) | 返回数组array的长度 |
ARRAY_CONTAINS(array, value) | 判断数组array中是否包含值value,返回布尔值 |
ARRAY_JOIN(array, delimiter) | 将数组array中的元素使用指定的分隔符delimiter连接成一个字符串返回 |
MAP_KEYS(map) | 返回map中所有的键组成的数组 |
MAP_VALUES(map) | 返回map中所有的值组成的数组 |
MAP_CONCAT(map1, map2) | 将两个map合并成一个map并返回 |
POSEXPLODE(array) | 将数组array中的每个元素及其下标作为多个行返回 |
INLINE(array_of_structs) | 将数组中的结构体展开成多个行,并将结构体中的字段展示为多个列 |