关于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前面只能写分组后的字段和汇集函数!汇集函数: 多进一出

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理