0


Hive(十)函数 列转行

 Hive是一个基于Hadoop的数据仓库工具,用于处理大规模的数据集。在Hive中,有一些函数可用于行转列(Pivot)和列转行(Unpivot)操作。这些函数主要用于将表中的数据在行和列之间进行转换。

 列转行是指将表中的列数据转换为行,通常使用LATERAL VIEW EXPLODE语法结合SELECT语句。例如,如果有如下表:

使用LATERAL VIEW EXPLODE可以将列转行:

SELECT id, value
FROM your_table
LATERAL VIEW EXPLODE(ARRAY(col1, col2, col3)) AS your_table_alias;

结果

这样,我们就可以通过LATERAL VIEW EXPLODE将表的列转为行,并生成新的行

总结:

在Hive中,可以使用Lateral View操作和explode函数来实现列转行的功能。具体步骤如下:使用Lateral View操作来将一列拆分成多行。例如,如果有一个包含数组的列,可以使用Lateral View拆分数组中的元素为多行数据。

SELECT column1, column2, exploded_column
FROM table_name
LATERAL VIEW explode(array_column) exploded_table AS exploded_column;

案例

初始数据games.txt 需求查询所有的动作游戏

使命召唤 动作/战争
超级玛丽 动画/动作
仙剑奇侠传 剧情/动作/古装
真·三国无双 动作/奇幻/古装

建表语句:

create table games(name string, types array<string>) row format delimited fields terminated by ' ' collection items terminated by '/';

加载数据:

load data local inpath '/games.txt' into table games;

列转行:

select name, type from games lateral view explode(types) k as type;

结果

查询所有的动作游戏:

select * from (select name, type from games lateral view explode(types) k as type) tmp where type= '动作';

案例2:多个分组

数据 查询出活泼喜欢打篮球的人

lisi 活泼/开朗 打篮球/听音乐
wangwu 大方/活泼 打乒乓球/听音乐
zhangsan 活泼/幽默 跑步/打篮球
tom 安静/沉默 打游戏/看电影

建表

create table people(name string, xinge array<string>, aihao array<string>) row format delimited fields terminated by ' ' collection items terminated by '/';

加载数据:

load data local inpath '/people.txt' into table people;

select name,x, a from people lateral view explode(xinge) x_tmp as x lateral view explode(aihao) a_tmp as a;

获取性格活泼喜欢打篮球的人:

select * from (select name, x, a from people lateral view explode(xinge) x_tmp as x lateral view explode(aihao) a_tmp as a) tmp where x='活泼' and a='打篮球';

总结

‌Lateral View是‌Hive SQL中的一个功能,主要用于将原本汇总在一条数据中的信息拆分成多条数据,并与原表进行笛卡尔积操作,从而得到明细表。 Lateral View常常与‌UDTF(用户定义的表生成函数)一起使用,最常见的是与‌explode函数搭配使用。Explode函数用于处理array或map类型的数据,将其拆分成多行数据。Lateral View的作用是将这些拆分后的数据与原表进行关联,生成一个虚拟表,以便进行进一步的数据处理和分析


本文转载自: https://blog.csdn.net/sadfasdfsafadsa/article/details/141154528
版权归原作者 Allen019 所有, 如有侵权,请联系我们删除。

“Hive(十)函数 列转行”的评论:

还没有评论