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

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