大数据之Hive:hive函数讲解:行转列
Posted 浊酒南街
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之Hive:hive函数讲解:行转列相关的知识,希望对你有一定的参考价值。
1.相关函数说明
CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串;
CONCAT_WS(separator, str1, str2,…):它是一个特殊形式的 CONCAT()。第一个参数剩余参数间的分隔符。分隔符可以是与剩余参数一样的字符串。
COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段。
2.数据准备
name | constellation | blood_type |
---|---|---|
孙悟空 | 白羊座 | A |
大海 | 射手座 | A |
宋宋 | 白羊座 | B |
猪八戒 | 白羊座 | A |
凤姐 | 射手座 | A |
3.需求
把星座和血型一样的人归类到一起。结果如下:
射手座,A 大海|凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋
4.创建本地constellation.txt,导入数据
[hadoop@bigdata02 datas]$ vi constellation.txt
孙悟空 白羊座 A
大海 射手座 A
宋宋 白羊座 B
猪八戒 白羊座 A
凤姐 射手座 A
5.创建hive表并导入数据
create table person_info(
name string,
constellation string,
blood_type string)
row format delimited fields terminated by "\\t";
load data local inpath "/opt/module/datas/constellation.txt" into table person_info;
6.按需求查询数据
select
t1.base,
concat_ws('|', collect_set(t1.name)) name
from
(select
name,
concat(constellation, ",", blood_type) base
from
person_info) t1
group by
t1.base;
结果如下
t1.base name
射手座,A 凤姐
白羊座,A 孙悟空|猪八戒
白羊座,B 宋宋
射手座,A 大海
备注: 1.concat(constellation, “,”, blood_type) base
可以替换为concat_ws(",",constellation, blood_type) base;
2.hive不支持group_concat 函数,此题若连mysql ,可以如下做
select
t1.base,
group_concat(t1.name) name
from
(select
name,
concat(constellation, ",", blood_type) base
from
person_info) t1
group by
t1.base;
结果如下:
有点小缺憾的是name列连接默认的是",";
以上是关于大数据之Hive:hive函数讲解:行转列的主要内容,如果未能解决你的问题,请参考以下文章