Hive中列转行使用LATERALVIEW与EXPLODE或POSEXPLODE。EXPLODE将数组或map拆为多行,POSEXPLODE额外返回元素位置索引。空值需用OUTER保留,字段类型须为array或map,否则需先转换。
在 Hive 中实现列转行,核心方法是通过 LATERAL VIEW 配合 EXPLODE 或 POSEXPLODE 完成。许多初学者会觉得这两个函数容易混淆,但只要理清各自的应用场景,操作起来会非常直观。下面将介绍几个常用技巧,帮助你快速掌握列转行的具体操作。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
LATERAL VIEW 和 EXPLODE 或 POSEXPLODEEXPLODE 函数:用于将数组或 map 类型的列拆分为多行,每行对应原始数组中的一个元素。例如,如果某一列存储了学生选修的科目列表,EXPLODE 可将每个科目转换为独立的一行。POSEXPLODE 函数:除了完成 EXPLODE 的功能外,还会额外返回元素在原数组中的位置(索引)。当需要知道元素在数组中的顺序,或后续需要根据位置进行关联时,使用此函数更为合适。LATERAL VIEW 遇到空值时会直接丢弃该行数据。如果需要保留空值对应的记录,应使用 LATERAL VIEW OUTER。EXPLODE 仅支持 array 或 map 类型,如果字段类型不符,需先通过 cast 进行转换,否则会报错。假设有一张学生成绩表,其中存储了数组类型的科目和分数:
create table ds_hive.stu_score(stu_id string, sub_ids array<string>, scores array<string>);
insert overwrite table ds_hive.stu_score select 1001, array('语文', '数学', '英语'), array('90', '88', '79') union all select 1002, array('语文', '地理'), array('54', '97');
使用 EXPLODE 将科目列展开:
select stu_id, tmp_table.sub_id from ds_hive.stu_score lateral view explode(sub_ids) tmp_table as sub_id;
如果需要获取科目在数组中的顺序,使用 POSEXPLODE:
select stu_id, tmp_table.sub_id, tmp_table.pos from ds_hive.stu_score lateral view posexplode(sub_ids) tmp_table as sub_id, pos;
通过上述方法,即可在 Hive 中轻松实现列转行操作。关键在于正确选择函数、妥善处理空值,并注意数据类型的适配,从而确保整体准确率和执行效率。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述