Hive常用的内置函数示例演示

测试数据:
1       zhang3  sing-pingpong-running   beijing:daxing
2       li4     sing-pingpong-running   beijing:daxing
3       wang5   sing-pingpong-running   beijing:daxing

建表:

create table psn
(
    id int,
    name string,
    likes array<string>,
    address map<string,string>
)
partitioned by (age int)
row format delimited
fields terminated by '\t'
collection items terminated by '-'
map keys terminated by ':'
lines terminated by '\n';


导入数据:
load data local inpath '/root/a.txt' into table psn partition(age=10);


结构函数测试

hive> select * from psn;
OK
1	zhang3	["sing","pingpong","running"]	{"beijing":"daxing"}	10
2	li4	["sing","pingpong","running"]	{"beijing":"daxing"}	10
3	wang5	["sing","pingpong","running"]	{"beijing":"daxing"}	10
hive> select likes[0] from psn;
OK
sing
hive> select address['beijing'] from psn;
OK
daxing

收集函数测试

hive> select size(address) from psn;
OK
1
hive> select size(likes) from psn;
OK
3

类型转换函数测试

hive> select cast('123' as int) from psn;
OK
123

日期函数测试

hive> select from_unixtime(1556362949) from psn;
OK
2019-04-27 19:02:29
hive> select to_date('1970-01-31 10:20:10') from psn;
OK
1970-01-31
hive> select year('1970-01-31 10:20:10') from psn;
OK
1970
hive> select month('1970-01-31 10:20:10') from psn;
OK
1
hive> select day('1970-01-31 10:20:10') from psn;
OK
31
hive> select dayofmonth('1970-01-31 10:20:10') from psn;
OK
31
hive> select hour('1970-01-31 10:20:10') from psn;
OK
10
hive> select minute('1970-01-31 10:20:10') from psn;
OK
20
hive> select second('1970-01-31 10:20:10') from psn;
OK
10
hive> select weekofyear('1970-01-31 10:20:10') from psn;
OK
5
hive> select datediff('1970-01-31','1970-2-22') from psn;
OK
-22
hive> select date_add('1970-01-31 10:20:10',10) from psn;
OK
1970-02-10
hive> select date_sub('1970-01-31 10:20:10',10) from psn;
OK
1970-01-21

条件函数测试:行转列

原stu表:
zs	yuwen	91
zs	shuxue	92
zs	yingyu	93
ls	yuwen	94
ls	shuxue	95
ls	yingyu	96
ww	yuwen	97
ww	shuxue	98
ww	yingyu	99


转换过后的trans_stu表:
name		yuwen		shuxue		yingyu
zs				91			92		93
ls				94			95		98
ww				97			98		99



SQL语句:

1、第一种方式:
select t1.name,t1.yuwen,t2.shuxue,t3.yingyu from 
	(select name,(case when subject='yuwen' then score end)yuwen from stu where (case when subject='yuwen' then score end)  is not null)t1 
	inner join 
	(select name,(case when subject='shuxue' then score end)shuxue from stu where (case when subject='shuxue' then score end) is not null)t2 
	on t1.name=t2.name 
	inner join 
	(select name,(case when subject='yingyu' then score end)yingyu from stu where (case when subject='yingyu' then score end) is not null)t3 
	on t1.name=t3.name;


结果:
Total MapReduce CPU Time Spent: 3 seconds 370 msec
OK
zs	91	92	93
ls	94	95	96
ww	97	98	99
Time taken: 41.81 seconds, Fetched: 3 row(s)




2、第二种方式:

select t1.name,t1.yuwen,t2.shuxue,t3.yingyu from 
	(select name,(if(subject='yuwen',score,null))yuwen from stu where (if(subject='yuwen',score,null)) is not null)t1 
	inner join 
	(select name,(if(subject='shuxue',score,null))shuxue from stu where (if(subject='shuxue',score,null)) is not null)t2 
	on t1.name=t2.name 
	inner join
	(select name,(if(subject='yingyu',score,null))yingyu from stu where (if(subject='yingyu',score,null)) is not null)t3 
	on t1.name=t3.name;


结果:
Total MapReduce CPU Time Spent: 3 seconds 230 msec
OK
zs	91	92	93
ls	94	95	96
ww	97	98	99
Time taken: 59.355 seconds, Fetched: 3 row(s)



3、第三种方式:
select t1.name,t1.score,t2.score,t3,score from 
	(select name,score from student where subject = 'yuwen')t1 
	inner join 
	(select name,score from student where subject = 'shuxue')t2
	on t1.name = t2.name
	inner join  
	(select name,score from student where subject = 'yingyu')t3 
	on t1.name=t3.name;

结果:
Total MapReduce CPU Time Spent: 3 seconds 870 msec
OK
zs	91	92	93
ls	94	95	96
ww	97	98	99
Time taken: 44.53 seconds, Fetched: 3 row(s)








字符串函数测试 

hive> select length('likes') from psn;
OK
5
hive> select reverse('I LOVE YOU') from psn;
OK
UOY EVOL I
hive> select concat('I',' LOVE', ' YOU') from psn;
OK
I LOVE YOU
hive> select concat_ws('-','I','LOVE', 'YOU') from psn;
OK
I-LOVE-YOU
hive> select substr('I LOVE YOU',7) from psn;
OK
 YOU
hive> select substring('I LOVE YOU',7) from psn;
OK
 YOU
hive> select substring('I LOVE YOU',7,9) from psn;
OK
 YOU
hive> select substr('I LOVE YOU',7,9) from psn;
OK
 YOU
hive> select upper('I Love yoU') from psn;
OK
I LOVE YOU
hive> select ucase('I Love yoU') from psn;
OK
I LOVE YOU
hive> select lower('I Love yoU') from psn;
OK
i love you
hive> select lcase('I Love yoU') from psn;
OK
i love you
hive> select trim('   I LOVE YOU   ') from psn;
OK
I LOVE YOU
hive> select ltrim('   I LOVE YOU   ') from psn;
OK
I LOVE YOU   
hive> select rtrim('   I LOVE YOU   ') from psn;
OK
   I LOVE YOU
hive> select regexp_replace('I LOVE YOU','YOU','CHINA') from psn;
OK
I LOVE CHINA
hive> select concat(space(10),'I') from psn;
OK
          I    #####space(10)返回10个空格
hive> select repeat(' I LOVE YOU',3) from psn;
OK
 I LOVE YOU I LOVE YOU I LOVE YOU
hive> select ascii(' I LOVE YOU') from psn;
OK
32
hive> select ascii('I LOVE YOU') from psn;
OK
73
hive> select lpad(name,10,'*') from psn;
OK
****zhang3
*******li4
*****wang5
hive> select rpad(name,10,'*') from psn;
OK
zhang3****
li4*******
wang5*****






聚合函数测试

count()    返回记录的条数
sum()      求和
avg()      求平均值
min()      求最小值
max()      求最大值



#####聚合函数还有很多,比如求方差,平均差等同。他们全部会执行mapreduce程序

内置表生成函数

hive> select explode(likes) from psn;
OK                #####likes为psn的一个数组列,将该列拆分成三列了
sing
pingpong
running
sing
pingpong
running
sing
pingpong
running
Time taken: 0.393 seconds, Fetched: 9 row(s)

更多函数参考文档:

链接:https://pan.baidu.com/s/14MTnu4oC6Xh6khsofiHRfw 
提取码:3cqj 
复制这段内容后打开百度网盘手机App,操作更方便哦

猜你喜欢

转载自blog.csdn.net/pengzonglu7292/article/details/89604599