hive的explode 函数通常是与侧视图(lateral view)一起使用,
主要用于规范化行 或者解析json
一个数据表的表数据如下所示。
1、我们如何把student这一列中的数据由一行变成多行。这里需要使用split和explode,并结合lateral view实现。
代码如下:
select class,studentName from class lateral view explode(split(studnet,',')) t as studentName;
2、每个同学来一个编号,假设编号就按姓名的顺序,此时我们要用到另一个hive函数,叫做posexplode
代码如下:
select class,stuIndex+1 as stuIndex,studentName from class lateral view posexplode(split(studnet,',')) t as stuIndex,studentName;
3、如果我们分别对两列进行explode的话,假设每列都有三个值,那么最终会变成3 * 3 = 9行。但我们想要的结果只有三行。此时我们可以进行两次posexplode,姓名和成绩都保留对应的序号,即使变成了9行,我们通过where条件只保留序号相同的行即可
代码如下:
select class,stuName,stuScore from class lateral view posexplode(split(studnet,',')) t as stuIndex1,stuName lateral view posexplode(split(score,',')) s as stuIndex2,stuScore where stuIndex1=stuIndex2;