1.str_to_map函数
将字符类型数据,转化成map格式的数据
1.1:语法描述
STR_TO_MAP(VARCHAR text, VARCHAR listDelimiter, VARCHAR keyValueDelimiter)
1.2:功能描述
使用listDelimiter将text分隔成K-V对,然后使用keyValueDelimiter分隔每个K-V对,组装成MAP返回。默认listDelimiter为( ,),keyValueDelimiter为(=)。
1.3:案例
str_to_map('1001=2021-03-20,1002=2021-03-20', ',' , '=')
{"1001":"2021-03-20","1002":"2021-03-20"}
1.4:实战
创建数据
hive (gmall)>
drop table if exists stud;
create table stud (name string, grade string, course string, score int);
向原数据表中插入数据
hive (gmall)>
insert into table stud values('zhang3','优','math',88);
insert into table stud values('li4','良','math',72);
insert into table stud values('zhao6','差','math',44);
insert into table stud values('wang5','优','chinese',80);
insert into table stud values('zhao6','差','chinese',55);
insert into table stud values('tian7','良','chinese',75);
把同一分组的不同行的数据聚合成一个集合
hive (gmall)> select course, concat_ws(',',collect_set(concat(name,'=',grade))) , avg(score) from stud group by course;
chinese zhang3=优,li4=良,zhao6=差 68
math wang5=优,zhao6=差,tian7=良 70
hive (gmall)> select course, str_to_map(concat_ws(',',collect_set(concat(name,'=',grade))),',','=') , avg(score) from stud group by course;
chinese {zhang3:优,li4:良,zhao6:差 } 68
math { wang5:优,zhao6:差,tian7:良} 70