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

Snowflake中从Variant类型JSON数据提取Update字段的SQL查询报错问题

解决Snowflake中提取Variant类型外层字段的问题

你的问题出在字段层级的引用错误上——Update字段是在整个JSON的根层级(也就是src对象下),而你之前的查询里试图从flatten展开的数组元素(value)里去取它,这当然找不到啦!

咱们先理清楚JSON的结构:

  • 根对象是src,包含两个顶级属性:MyData和Update
  • MyData里才有Assignment数组,你用lateral flatten展开的是这个数组里的元素(也就是value对应的是每个Assignment对象)

所以正确的做法是直接从外层的src引用Update字段,而不是从value里找。修改后的SQL应该是这样:

with car_sales(src) as ( 
    select parse_json(column1) as src 
    from values ( 
        '{ "MyData": { "DataID": "16784", "EmpFirstName": "Jenny", "EmpLastName": "Test1", "Description": "My Company Data", "Assignment": [ { "AssignentId": "1077", "AssignentName": "Multi Location", "AssignentDescription": "usa" } ], "salary": 21557 }, "Update": true }' 
    ) 
)
select 
    src:MyData:DataID::string as "DataID",
    src:Update::Boolean as "Update", -- 直接从根层级的src获取Update
    value:AssignentId::string as "AssignentId",
    value:AssignentName::string as "AssignentName"
from car_sales,
lateral flatten(input => src:MyData:Assignment);

这里的关键是:当你用lateral flatten展开数组时,原表的src字段在每一行展开结果中都是完整保留的,所以你可以直接引用它的顶级属性,不需要和展开后的value混在一起。

另外顺便提一句,你原JSON里的Assignment数组元素里有个多余的逗号("AssignentDescription": "usa",后面的逗号),我已经在示例里去掉了,避免解析问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:43:10