赞
踩
collect_set函数:列转行专用函数,有时为了字段拼接效果,多和concat_ws()函数连用;
hive (gmall)>
drop table if exists stud;
create table stud (name string, area string, course string, score int);
hive (gmall)>
insert into table stud values('zhang3','bj','math',88);
insert into table stud values('li4','bj','math',99);
insert into table stud values('wang5','sh','chinese',92);
insert into table stud values('zhao6','sh','chinese',54);
insert into table stud values('tian7','bj','chinese',91);
hive (gmall)> select * from stud;
stud.name stud.area stud.course stud.score
zhang3 bj math 88
li4 bj math 99
wang5 sh chinese 92
zhao6 sh chinese 54
tian7 bj chinese 91
hive (gmall)> select course, collect_set(area), avg(score) from stud group by course;
chinese ["sh","bj"] 79.0
math ["bj"] 93.5
hive (gmall)> select course, collect_set(area)[0], avg(score) from stud group by course;
chinese sh 79.0
math bj 93.5
hive (gmall)> select course, concat_ws('|',collect_set(area)), avg(score) from stud group by course;
chinese sh|bj 79.0
math bj 93.5
补充:collect_list: 与collect_set的区别就是列的值不去重;
上述需求,sql为:
hive (gmall)> select course, concat_ws('|',collect_list(area)), avg(score) from stud group by course;
chinese sh|sh|bj 79.0
math bj|bj 93.5
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。