hive 函数
其余罕用
1.NVL: 空字段赋值
给值为 NULL 的数据赋值,它的格局是 NVL(string1, replace_with)。它的性能是如果 string1 为 NULL,则 NVL 函数返回 replace_with 的值,否则返回 string1 的值,如果两个参数都为 NULL,则返回 NULL。
2.concat: 字符串拼接
能够在参数中传入多个 string 类型的字符串,一旦有一个参数为 null,返回 Null!
Tips:
- 最好曾经做好数据荡涤,使得没有 null 数据
3.concat_ws:
应用指定的分隔符实现字符串拼接!
concat_ws(分隔符,[string | array<string>]+)
4. collect_set:
collect_set(列名):将此列的多行记录合并为一个 set 汇合,去重
5. collect_list:
collect_list(列名):将此列的多行记录合并为一个 set 汇合,不去重
6. explode:
explode(列名)
参数只能是 array 或 map!
将 array 类型参数转为 1 列 N 行
将 map 类型参数转为 2 列 N 行
列转行:1 列 1 行 转为 1 列 N 行
留神:
- explode 函数属于 UDTF,UDTF 在应用时,不能和其余表达式一起呈现在 select 子句后!
- 只能独自呈现在 select 子句后!
案例:movie_info.movie | movie_info.category《疑犯追踪》| ["悬疑","动作","科幻","剧情"]
冀望后果:《疑犯追踪》悬疑《疑犯追踪》动作《疑犯追踪》科幻《疑犯追踪》剧情《Lie to me》悬疑
------------- 不容许 ----------
select movie,explode(category)
from movie_info
-------- 不符合要求 --------------
select movie,col1
from movie_info
join
(select explode(category) col1
from movie_info) tmp
解决:①先 explode
②须要将炸裂后的 1 列 N 行,在逻辑上仍然视作 1 列 1 行,理论是 1 列 N 行,和 movie 进行笛卡尔集
这个操作在 hive 中称为侧写(lateral VIEW)
Lateral view explode() 长期表名 as 长期列名
select movie,col1
from movie_info Lateral view explode(category) tmp1 as col1
Tips:
- select 前面只能写分组后的字段和汇集函数!汇集函数:多进一出