> 文章列表 > Hive常用函数

Hive常用函数

Hive常用函数

详情见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) 将数组中的结构体展开成多个行,并将结构体中的字段展示为多个列