Hive行转列
coacat(string A/col,string B/col…):返回输入字符串连接后的结果,支持人一个输入字符串;
//查询语句 select concat(deptid,dname) from dept; //返回结果就是连接多个列 select concat(deptid,",",dname) from dept;concat_ws(separator,str1,str2,…):他是一个特殊的形式 concat( )
select concat_ws(","ename,job,hiredate) from emp; //返回结果就是将和多个列合并在一行,用逗号分割collect_set(col):函数只接受基本数据类型,它的主要作用就是将某个字段的值进行去重汇总(列),产生新的array类型的字段
//准备数据文件 [root@bigdata ~]# vi person_info.txt 孙悟空 白羊座 A 大海 射手座 A 宋宋 白羊座 B 猪八戒 白羊座 A 凤姐 射手座 A //创建数据表 create table person_info( name string, cinstellation string, blood_type string) row formaat delimited fields terminated by "\t"; //导入数据 load data inpath '/opt/db/person_info.txt' into table person_info; //查询数据 hive> select * from person_info; OK 孙悟空 白羊座 A 大海 射手座 A 宋宋 白羊座 B 猪八戒 白羊座 A 凤姐 射手座 A //拼接函数 hive> select concat_ws(",",constellation,blood_type) c_b,name from person_info; 白羊座,A 孙悟空 射手座,A 大海 白羊座,B 宋宋 白羊座,A 猪八戒 射手座,A 凤姐 //列转行 hive> select > t1.c_b, > concat_ws("|",collect_set(t1.name)) > from( > select > concat_ws(",",constellation,blood_type) c_b, > name > from person_info) t1 > group by > t1.c_b; //返回结果 射手座,A 大海|凤姐 白羊座,A 孙悟空|猪八戒 白羊座,B 宋宋Hive列转行
explode(col):将hive一列中复杂的array或者map结构拆分成多行。
lateal view
用法:lateral view udtf(expression) tableAlias AS columnAlias
解释:用于split,explode等UPTF一起使用,它能将一列数据彩纷呈多张数据,在此基础上可以对才分后的书数据进行聚合。
//使用文件数据 vi movie.txt 《疑犯追踪》 悬疑,动作,科幻,剧情 《Lie to me》 悬疑,警匪,动作,心里,剧情 《战狼2》 战争,动作,灾难 //创建表 hive> create table movie_info( > movie string, > category array<string>) > row format delimited fields terminated by "\t" > collection items terminated by ","; //导入数据 hive> load data local inpath '/opt/db/movie.txt' into table movie_info; //列转行 hive> select movie,category_name > from movie_info > lateral view explode(category) tmpTable as category_name; 解析思路:里面用到了侧写 新城一个心的表吗,lateral view explode(category)表示对原来的表进行侧写, //movie(最终的需求,就是《》字段) category_name:侧写字段(炸裂后的新名字(列)) select movie,category_name // 表明 from movie_info //对上的表进行侧写(lateral view), //explode(category):表示新的具体的数组分成多行显示 lateral view explode(category) tmpTable as category_name; 炸开的这样表explode(category)对原来的movie_info进行侧写,然后根据相应的内容进行查询语句