乐趣区

关于hive:hive常用函数

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:

  1. select 前面只能写分组后的字段和汇集函数!汇集函数:多进一出
退出移动版