当前位置:   article > 正文

HIVE 行转列,列转行函数比较_hive行转列列转行laterview

hive行转列列转行laterview

HIVE 列转行

在这里插入图片描述
左边的数据为 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再把结果组合,产生一个支持别名表的虚拟表。

在这里插入图片描述

HIVE 行转列

在这里插入图片描述
在这里插入图片描述
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
  • 1
  • 2

FROM temp_row_column_conversion

GROUP BY movie

– 方法2:group by + group_concat
SELECT

movie,
group_concat(DISTINCT(actors_new),",")as actors
  • 1
  • 2

FROM temp_row_column_conversion

GROUP BY movie

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/894914
推荐阅读
相关标签
  

闽ICP备14008679号