hive 行转列

最近更新于 2020年11月20日 星期五 18:43:31

hive中行转列

1. 数据准备

person_info.txt

name	constellation	blood_type
孙悟空  白羊座  A
大海    射手座  A
宋宋    白羊座  B
猪八戒  白羊座  A
凤姐    射手座  A

2. 需求

把星座和血型一样的人归类到一起 结果如下:
射手座,A            大海|凤姐
白羊座,A            孙悟空|猪八戒
白羊座,B            宋宋

3. 创建表

create table person_info(
name string, 
constellation string, 
blood_type string) 
row format delimited fields terminated by "\t";

4. 创建本地person_info.txt后,导入数据

load data local inpath "/opt/modules/input/person_info.txt" into table person_info;

5. 按需求查询数据(分解为一步步来实现)

行转列用到的关键函数:CONCAT

CONCAT(string A/col, string B/col…):返回输入字符串连接后的结果,支持任意个输入字符串

select
name,concat(constellation,",",blood_type) constellation_blood_type
from 
person_info;

+-------+--------+----------------+
| name  |  constellation_blood_type|
+-------+--------+----------------+
| 孙悟空   | 白羊座,A  |
| 大海    | 射手座,A  |
| 宋宋    | 白羊座,B  |
| 猪八戒   | 白羊座,A  |
| 凤姐    | 射手座,A  |
  1. COLLECT_SET(col):函数只接受基本数据类型,它的主要作用是将某字段的值进行去重汇总,产生array类型字段
> select t1.c_b,collect_set(t1.name)
from
(select concat_ws(",",constellation,blood_type) c_b,name
from person_info)t1
group by t1.c_b;

+---------+----------------+--+
| t1.c_b  |      _c1       |
+---------+----------------+--+
| 射手座,A   | ["大海","凤姐"]    |
| 白羊座,A   | ["孙悟空","猪八戒"]  |
| 白羊座,B   | ["宋宋"]         |
+---------+----------------+--+

> 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;

+---------+----------+--+
| t1.c_b  |   _c1    |
+---------+----------+--+
| 射手座,A   | 大海|凤姐    |
| 白羊座,A   | 孙悟空|猪八戒  |
| 白羊座,B   | 宋宋       |
+---------+----------+--+
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值