跳到主要内容

posexplode_outer:带位置拆分数组(null保留)

速查结论

posexplode_outer(expr) 是 Spark SQL 中用于将数组或 Map 元素拆分为多行并携带位置索引,空或 null 时保留 NULL 行的函数。

语法

posexplode_outer(expr)

参数说明

参数类型说明
exprARRAY 或 MAP要拆分的数组或 Map

返回值

返回一个表,包含以下列:

  • 对于数组:pos(元素位置,从 0 开始)和 col(元素值)
  • 对于 Map:pos(元素位置,从 0 开始)、keyvalue

当输入为空数组、空 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真题

交流微信二维码

你可能还想看