Snowflake中如何删除嵌套JSON内的指定子对象?
解决Snowflake中删除JSON嵌套字段的问题
你用object_delete(json_data,'address:apt')没效果的原因是:Snowflake的OBJECT_DELETE函数仅支持删除顶层键,第二个参数不能用冒号/点分隔的嵌套路径——它会尝试寻找名为address:apt的顶层键,而原JSON里根本没有这个键,所以结果和原数据完全一致。
要删除嵌套的address.apt字段,有两种实用方法:
方法1:处理嵌套对象后替换回原JSON
先通过OBJECT_DELETE删掉address子对象里的apt键,再用OBJECT_INSERT覆盖原JSON中的address字段:
SELECT OBJECT_INSERT( json_data, 'address', OBJECT_DELETE(json_data:address, 'apt'), TRUE -- 允许覆盖已存在的address键 ) AS modified_json FROM your_table;
方法2:直接构造新JSON对象
用OBJECT_CONSTRUCT重新生成JSON,主动排除不需要的apt字段:
SELECT OBJECT_CONSTRUCT( 'id', json_data:id, 'name', json_data:name, 'address', OBJECT_CONSTRUCT( 'add1', json_data:address:add1, 'add2', json_data:address:add2, 'city', json_data:address:city ) ) AS modified_json FROM your_table;
如果JSON结构复杂,方法1更灵活,不需要手动列举所有要保留的字段。
内容的提问来源于stack exchange,提问作者snowflake_user
相关产品推荐
相关产品推荐

