posexplode:带位置拆分数组
速查结论
posexplode(expr) 是 Spark SQL 中用于将数组或 Map 元素拆分为多行,并携带位置索引的函数。
语法
posexplode(expr)
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| expr | ARRAY 或 MAP | 要拆分的数组或 Map |
返回值
返回一个表,包含以下列:
- 对于数组:
pos(元素位置,从 0 开始)和col(元素值) - 对于 Map:
pos(元素位置,从 0 开始)、key和value
除非在 LATERAL VIEW 子句中另有指定,否则使用上述默认列名。
示例
> SELECT posexplode(array(10,20));
0 10
1 20
> SELECT * FROM posexplode(array(10,20));
0 10
1 20
常见报错与避坑指南
- 与 explode 的区别:
posexplode比explode多返回一个位置列pos,从 0 开始计数。如果不需要位置信息,使用explode更简洁。 - 空数组不产生行:如果输入为空数组,
posexplode不会产生任何行。如需在空数组时保留 NULL 行,请使用posexplode_outer。 - 仅可在 SELECT 子句或 LATERAL VIEW 中使用:作为生成器函数,
posexplode不能用于 WHERE 等子句中。
Since: 2.0.0
📱关注公众号
「数据仓库技术」文章同步更新,不错过每一篇干货

💬加群交流
备注「数据仓库技术」加入社群,每日一道大厂SQL真题
