Snowflake中LEFT JOIN LATERAL FLATTEN未生效,表现如INNER JOIN
问题分析与解决
这不是Snowflake的bug,问题出在FLATTEN函数的默认行为:当输入为NULL时,它不会生成任何输出行。你的第一条数据(包含x、y、z的JSON对象)没有exclude字段,val:exclude会返回NULL,导致FLATTEN没有输出行,最终LEFT JOIN后这部分数据无法被保留。
解决方法
只需给FLATTEN添加OUTER => TRUE参数,让它在输入为NULL或空数组时返回一行值为NULL的记录,即可实现预期的LEFT JOIN效果:
with source_cte as ( select val, i.value::TEXT as include_symbol from test_json, lateral flatten(input=>val:include) as i ) select include_symbol, e.value::TEXT as exclude_symbol from source_cte LEFT JOIN LATERAL FLATTEN(input=>val:exclude, OUTER => TRUE) e
执行结果
修改后的查询会返回预期结果:
INCLUDE_SYMBOL EXCLUDE_SYMBOL x NULL y NULL z NULL d a d b e a e b
内容的提问来源于stack exchange,提问作者archjkeee
相关产品推荐
相关产品推荐

