大数据之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.数据准备

nameconstellationblood_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函数讲解:行转列的主要内容,如果未能解决你的问题,请参考以下文章

大数据之hive:行列转换系列总结

hive函数之~行转列与列转行

Hive 行转列 & 列转行

大数据技术之_09_Hive学习_复习与总结

大数据技术之Hive函数压缩和存储

大数据技术之Hive函数压缩和存储