hive学习笔记,hive内置函数的使用

Hive常用内置函数:

1、类型转换函数,2、数学运算函数,3、字符串操作函数,4、时间操作函数

5、表生成函数,6,、集合操作函数数  ,7、条件控制函数 ,8、json解析函数 ,9、分析函数(分组排序)

其中:

       1、类型转换函数 包含:字符串转日期,字符串转int类型等操作 cast("2017-08-03" as date) ;cast("5" as int) ;

        2、数学运算函数 包含:四舍五入,向上取整,绝对值,求一组中的最大,最小值(聚合函数),求某一行中,几个列中的最大值 greatest(3,5,6), least(3,5,6)(保证类型一样),round(5.4), ceil(5.4), floor(5.4) ,max(), min() ;

      3、字符串操作函数 包含:字符串的截取,字符串的拼接,(直接拼接,带拼接符拼接),字符串的切割,大小写转换,

substr("abcdefg",2), substr("abcdefg",2,3) ,concat("ab","xy") ==>abxy ,concat_ws(".","192","168","33","44") ==>192.168.33.44

split("192.168.33.44","\\.")==> (返回数组),upper(string str);

    4、时间操作函数  包含:获取当前时间的毫秒数时间戳,将当前时间戳转成年月日时分秒格式,日期字符串转unix秒数,字符串转日期   unix_timestamp(),from_unixtime(unix_timestamp()),from_unixtime(unix_timestamp(),"yyyy/MM/dd HH:mm:ss")<指定格式>,unix_timestamp("2017-08-10 17:50:30");unix_timestamp("2017/08/10 17:50:30","yyyy/MM/dd HH:mm:ss");(备注默认时间格式是yyyy-MM-dd HH:mm:ss 如果,日期字符串格式不是这样的,就要指定格式化模式),to_date("2017-09-17 16:58:32")

6、集合相关函数  包含 数组的排序,数组的长度,数组是否包含某个值,数组的第几个元素,map的大小,map的所有key,map的所有value(返回的是一个数组)

array_contains(Array, value)  返回boolean值

map_keys(Map)  返回一个数组 ,map_values(Map) 返回一个数组,size(Array)  返回一个int值

select sort_array('c','b','a') ; --错误写法,必须指定为array
select sort_array(array('c','b','a')) ;

select id ,name ,subject[1] from stu_sub ; --第一元素

5、表生成函数

    5.1行转列函数     explode()  对数组字段“炸裂”

   行转列函数的使用explode(),输入参数一个数组arry(),(注意arry数组的分割符是,)

SELECT explode(array(2,3,4)) AS word;

SELECT explode(split("192.168.33.44","\\.")) AS word;

hive学习笔记,hive内置函数的使用_第1张图片     hive学习笔记,hive内置函数的使用_第2张图片

 

2、 

表生成函数lateral view,

理解: lateral view 相当于两个表在join     

左表:是原表

右表:是explode(某个集合字段)之后产生的表

而且:这个join只在同一行的数据间进行

 

1,一龙,体育#生物#化学
2,二狗,哲学#物理#英语#语文
3,三毛,哲学#物理#数学

create table stu_sub(id int ,name string,subject array)
row format delimited 
fields terminated by ','
collection items terminated by '#';

load data local inpath '/usr/hive/sub.txt' into table stu_sub ;

 

hive学习笔记,hive内置函数的使用_第3张图片

hive学习笔记,hive内置函数的使用_第4张图片

 

hive学习笔记,hive内置函数的使用_第5张图片

选修了物理的人, 

hive学习笔记,hive内置函数的使用_第6张图片

select * from stu_sub lateral view explode(subject) tmp ;

select id ,name,col from stu_sub lateral view explode(subject) tmp ;

select id ,name ,col from 
(select id ,name,col from stu_sub lateral view explode(stu_sub.subject) tmp )as a 
where a.col='物理' ;

这里后面的tmp,类似给连接后的表取的别名,不可省略!!!

 

7、条件控制函数

case 和 if 的使用:

select id,name,
case
when id<2 then '好学生'
when id>=2 and id <3 then '差学生'
else '待业'
end as status
from stu_sub;

hive学习笔记,hive内置函数的使用_第7张图片

select name, if( array_contains(subject,'物理'),'理科生','文科生') as sss from stu_sub;

hive学习笔记,hive内置函数的使用_第8张图片

 

8、json解析函数:表生成函数 json_tuple函数

有如下表结构:

{"movie":"新喜剧之王","rate":"5","timeStamp":"2019-02-04","uid":"14"}
{"movie":"疯狂的外星人","rate":"3","timeStamp":"2019-02-01","uid":"12"}
{"movie":"我不是药神","rate":"3","timeStamp":"2018-08-26","uid":"31"}
{"movie":"流浪地球","rate":"4","timeStamp":"2018-07-31","uid":"21"}

create table t_json(str string);

load data local inpath '/usr/hive/json.txt' into table t_json ;

select * from t_json ;

select json_tuple(str,'movie','rate','timeStamp','uid') as(movie,rate,ts,uid) from t_json;

将json格式的字符串,成每一列:

hive学习笔记,hive内置函数的使用_第9张图片

hive学习笔记,hive内置函数的使用_第10张图片

 

9、分析函数  指定分组策略,并根据指定字段排序

     分析函数:row_number() over()——分组TOPN

95019,邢小丽,27,女
95003,王敏,25,女
95004,张立,17,男
95012,孙花,45,女
95010,孔小涛,15,男
95005,刘刚,23,男

create table t_student2(id int ,name string,age int,sex string)
row format delimited
fields terminated by ',';

select * from t_student2 ;

select age,name,sex,
row_number() over(partition by sex order by age desc) as rank
from t_student2 ;

row_number()给每一行编号,over(通过什么操作后,根据什么分组,再根据什么排序),

hive学习笔记,hive内置函数的使用_第11张图片

 

 

你可能感兴趣的:(大数据)