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的作用是将这些拆分后的数据与原表进行关联,生成一个虚拟表,以便进行进一步的数据处理和分析
版权归原作者 Allen019 所有, 如有侵权,请联系我们删除。