Hive中的常用内置函数
1.空字段赋值
相比较mysql的ifnull函数,hive内置了nvl()函数用于给空字段赋值
用法:select nvl(列名, A);
解释:给该列中为null的值赋A值。
2.时间类
(1)获取系统当前时间戳ts:unix_timestamp()
,该函数一般结合from_unixtime(ts[, string format])
函数使用。
(2)格式化时间:date_format('2021-1-18 14:08:56', string format)
注意:format多为:‘yyyy-MM-dd’
(3)时间跟天数相加:date_add('time', num)
,num可以为负数,与此用法相同的还有date_sub('time', num)
函数
(4)两个日期相减:datediff('time1', 'time2')
3.if和case when
(1)if语法:if(布尔表达式, x, y)
,布尔表达式成立返回x,否则返回y。
(2)case when语法:case when 布尔表达式 then x else y end
,布尔表达式成立返回x,否则返回y。此外,case when还有另外一种用法:case ... when ... then ... when ... then ... else ... end
这与mysql中的用法一直,类似java中的switch …case的用法。
4.替换函数
regexp_replace(),用法示例:
regexp_replace('hello-world', '-', ',')
,结果为:hello,world
5.行转列函数
concat(列名1, '连接符', 列名2, '连接符', 列名3 )
,该函数可以把任意类型的列拼接起来,他还有一个特殊形式:concat_ws('连接符', 列名1, 列名2, ...)
,注意:该函数只能连接string类型的列。
6.collect_set(列名)
把某列数据(数据类型只能为基本数据类型)变成一个array类型的字段
7.列转行函数/炸裂函数 explode(列名)
该函数列的类型为复杂数据类型(array、map、struct),且多与lateral view连用。特别说明,该函数把某列"炸"成了一张表,语法:
select xxx, 列别名
from 表名 lateral view explode(列名) 表别名 as 列别名;
授人以鱼不如授人以渔,如何查看hive中有哪些内置函数呢?以及怎么使用它们呢?
(1)查看hive中所有的内置函数 show functions;
(2)函数的用法 desc function 函数名
(3)函数的详细用法 desc function extended 函数名