Snowflake使用OBJECT_CONSTRUCT生成行级JSON返回异常问题
问题根因
- Snowflake原生
OBJECT_CONSTRUCT函数默认会自动忽略值为NULL的键,仅保留非空字段对应的键值对。如果某行只有单个字段非空,就会返回仅含单组键值对的结果,和你遇到的异常表现完全匹配。 - 次要排查点:确认查询客户端未开启JSON结果自动截断、分行展示配置,部分可视化工具会将单个JSON对象拆分为多行显示,造成键缺失的错觉。
修复方案
方案1:每行返回固定结构的完整JSON对象
使用OBJECT_CONSTRUCT_KEEP_NULL替换默认的OBJECT_CONSTRUCT,即使字段值为NULL也会保留对应键,确保每行JSON都固定包含Address、Zip、State三个键:
SELECT OBJECT_CONSTRUCT_KEEP_NULL( 'Address', Address, 'Zip', Zip, 'State', State ) AS json_value FROM example_table_above;
方案2:直接输出指定格式的连续JSON块
如果需要直接得到逗号分隔的多JSON对象拼接结果,可使用以下语句一步生成目标格式:
SELECT ARRAY_TO_STRING( ARRAY_AGG( TO_JSON( OBJECT_CONSTRUCT_KEEP_NULL( 'Address', Address, 'Zip', Zip, 'State', State ) ) ), ',' ) AS json_blocks FROM example_table_above;
内容的提问来源于stack exchange,提问作者0004
相关产品推荐
相关产品推荐

