赞
踩
左边的数据为 select split(“a,b,c,d”, ‘,’)
右边的数据为 select explode(split(“a,b,c,d”, ‘,’))
具体案例
对每一个电影而言,后面3列或者4列 多列数据 转换成行的模式排列
第一步,炸开类型
select
explode(split(category,‘,’))
from movie_info
第二步 想让炸开后的临时表和炸开之前表所在行的其他字段进行join
select
movie,
category_name
from movie_info
lateral view explode(split(category,‘,’)) tmp as category_name;
LATERAL VIEW
用法:LATERAL VIEW udtf(expression) tableAlias AS columnAlias
解释:lateral view用于和split, explode等UDTF一起使用,它能够将一行数据拆成多行数据,在此基础上可以对拆分后的数据进行聚合。
lateral view首先为原始表的每行调用UDTF,UTDF会把一行拆分成一或者多行,lateral view再把结果组合,产生一个支持别名表的虚拟表。
select
uid ,
max(case when fid= k10 then num else 0 end) as find_10,
max(case when fid= k11 then num else 0 end) as find_11
from user_row_column_conversion
group by
uid
文本的拼接
Hive SQL 如下:
collect_list:把列聚合成为数组,不去重
collect_set:把列聚合成为数据,去重
concat_ws(separator, str1, str2, …):把多个字符串用分隔符进行拼接
– 方法1:group by + concat_ws + collect_list
SELECT
movie,
concat_ws(",",collect_list(actors_new)) as actors
FROM temp_row_column_conversion
GROUP BY movie
– 方法2:group by + group_concat
SELECT
movie,
group_concat(DISTINCT(actors_new),",")as actors
FROM temp_row_column_conversion
GROUP BY movie
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。