大数据之Hive: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);
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);
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
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
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
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
补充: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
上一篇:
JS实现多线程数据分片下载
下一篇:
一种指纹生物特征的隐私保护和认证方法