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
相关产品推荐
相关产品推荐

