Hive列转行和行转列

Hive列转行和行转列

列转行

使用collect_set函数(去重)和collect_list函数(不去重)进行列转行操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
--表数据
select * from test_01;
--湖北 武汉
--湖北 襄阳
--湖北 宜昌
--湖北 武汉
--广东 深圳
--广东 广州
--广东 珠海

-- 去重
select Province,collect_set(City) from test_01 group by Province;
--广东 ["深圳","广州","珠海"]
--湖北 ["武汉","襄阳","宜昌"]

--不去重
select Province,collect_list(City) from test_01 group by Province;
--广东 ["深圳","广州","珠海"]
--湖北 ["武汉","襄阳","宜昌","武汉"]

--默认使用逗号分割,可以使用concat_ws函数指定分割符
select Province,concat_ws(':',collect_list(City)) from test_01 group by Province;
--广东 深圳:广州:珠海
--湖北 武汉:襄阳:宜昌:武汉

行转列

使用explode函数、split函数和lateral view函数进行行转列操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
--表数据
select * from test_02;
--广东 深圳:广州:珠海
--湖北 武汉:襄阳:宜昌:武汉

-- 行转列
select Province,new_city from test_02 lateral view explode(split(City,':')) tmp as new_city;
--广东 深圳
--广东 广州
--广东 珠海
--湖北 武汉
--湖北 襄阳
--湖北 宜昌
--湖北 武汉
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2015-2023 henrrywan

请我喝杯咖啡吧~

支付宝
微信