You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spark SQL中inline()与inline_outer()的区别及适用场景咨询

Spark SQL中inline()与inline_outer()的差异及选择指南

两者的核心区别完全体现在处理空数组或Null数组的行为上,绝对不能随便混用,具体差异和适用场景如下:

核心行为差异

  • inline():如果输入的数组字段是空数组([])或者null,这一行会直接被过滤,不会生成任何输出行
  • inline_outer():哪怕数组是空的或者null,原始行依然会被保留,展开后的所有字段值填充为null

用实例看差异

先创建测试数据:

CREATE TEMP VIEW test_data AS
SELECT 1 AS id, ARRAY(STRUCT('a' AS col1, 10 AS col2)) AS arr
UNION ALL
SELECT 2 AS id, ARRAY() AS arr
UNION ALL
SELECT 3 AS id, NULL AS arr;

执行inline()的结果

SELECT id, inline(arr) FROM test_data;

输出:

idcol1col2
1a10

只有数组有有效内容的行被保留,id=2、3的行直接被过滤

执行inline_outer()的结果

SELECT id, inline_outer(arr) FROM test_data;

输出:

idcol1col2
1a10
2nullnull
3nullnull

所有原始行都被保留,空/Null数组对应的展开字段为null

场景选择

  • 用inline():当你只关心有有效数组内容的行,不需要保留空/Null数组的行时
  • 用inline_outer():当你需要完整保留所有原始行,哪怕数组无内容也要对应输出时

内容的提问来源于stack exchange,提问作者Guoran Yun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 05:05:37