当前位置:   article > 正文

大数据之Hive:Hive函数之collect_set()函数_hive collect set

hive collect set

1.collect_set函数

collect_set函数:列转行专用函数,有时为了字段拼接效果,多和concat_ws()函数连用;

2.实战

2.1:创建原数据表

hive (gmall)>
drop table if exists stud;
create table stud (name string, area string, course string, score int);
  • 1
  • 2
  • 3

2.2:向原数据表中插入数据

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

2.3:查询表中数据

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

2.4:把同一分组的不同行的数据聚合成一个集合

hive (gmall)> select course, collect_set(area), avg(score) from stud group by course;
chinese ["sh","bj"]     79.0
math    ["bj"]  93.5
  • 1
  • 2
  • 3

2.5:用下标可以取某一个

hive (gmall)> select course, collect_set(area)[0], avg(score) from stud group by course;
chinese sh      79.0
math    bj      93.5
  • 1
  • 2
  • 3

2.6:collect_set(area)中值用’|'分割

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
  • 1
  • 2
  • 3

补充: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
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/653983
推荐阅读
相关标签
  

闽ICP备14008679号