1、Explode炸裂函数
将hive某列一行中复杂的 array 或 map 结构拆分成多行(只能输入array或map)
语法:
select explode(字段) as 字段命名 from 表名;
举例:
1)explode(array)使得结果中将array列表里的每个元素生成一行
select explode(array('1','2','3')) DD
2)explode(map)使得结果中将map里的每一对元素作为一行,key为一列,value为一列
select explode(map('A','1','B','2','C','3'));
select explode(map('Chinese','100','Math','88','English','38'));
局限性:
1、不能关联原有的表中的其他字段
2、不能与group by、cluster by、distribute by、sort by联用
3、不能进行UDTF嵌套
2、posexplode()函数
explode():对一列进行炸裂可以使用
posexplode():对两列进行多行转换,可以将index和数据都取出来,使用两次posexplode并令两次取到的index相等即可
举例:
select posexplode(collect_set('AA'))
collect_set:将某字段进行去重处理,返回array类型
1)实例一
3、Lateral View
Lateral View配合 split, explode 等UDTF函数一起使用,它能够将一列数据拆成多行数据,并且对拆分后结果进行聚合,即将多行结果组合成一个支持别名的虚拟表。相当于拆出一张虚拟表,与原表进行关联。