1.行转列的实现方式
原始数据:
data title uv
2019-01-01 docter 100
2019-01-01 nurse 99
2019-01-02 nurse 199
2019-01-02 docter 200
期待结果:
data docter nurse
2019-01-01 100 99
2019-01-02 200 199
实现方式(注意collect_set可以对数据去重、collect_list不去重):
select
data
,concat_ws('',collect_list(docter)) docter
,concat_ws('',collect_list(nurse)) nurse
from (
select
data
,case when title='docter' then uv else '' end as docter
,case when title='nurse' then uv else '' end as nurse
from test01 ) a group by data;
2.列转行的实现方式
select
movie_name
,category_name
from movie_info lateral view explode(category)a as category_name;
注意:如果将数组插入string类型的字段中,会无法识别,要先通过concat_ws转为字符串
concat_ws: 用指定的字符连接字符串
例如:
连接字符串:
concat_ws("_", field1, field2),输出结果将会是:“field1_field2”。
数组元素连接:
concat_ws("_", [a,b,c]),输出结果将会是:"a_b_c"。