我正在尝试更新JSON数据中的特定属性。这些属性可以位于嵌套JSON中的任何位置。
当使用OBJECTIVE使用Update语句时,JSON数据将被嵌套对象替换。
有没有其他方法可以更新?如果我在SET命令的左边指定JPATH,它会抛出一个错误。
CREATE TABLE TEST AS
SELECT PARSE_JSON('{"id":"1",
"name":
{"first_name":"ABC",
"last_name":"XYZ"},
"city_lived":["CITY1","CITY2"],
"contacts":
{
"phone":
[
{"mob":"45345345"},{"tel":"4363636"}
],
"email":"[email protected]"
}
}')::variant AS VAL
;
UPDATE TEST
SET VAL=OBJECT_INSERT(VAL:contacts,'email','TEST',true);
select * from TEST;
{
"email": "TEST",
"phone": [
{
"mob": "45345345"
},
{
"tel": "4363636"
}
]
}
2条答案
按热度按时间hyrbngr71#
下面是我已经尝试过,并正在工作,但不说服我作为一个理想的解决方案.我愿意接受更多的建议。
步骤1a:创建一个动态生成键和jpath的存储过程。
使用横向扁平递归。对于每个键,捕获JPATH。
步骤1b:在过程中创建一个函数,该函数捕获我希望更新的所有属性
创建一个函数来执行下面的操作,
V. =“"(默认为空字符串)
步骤2:使用自定义函数更新JSON。动态生成函数的原因是Snowflake Function不接受JPATH作为函数的参数。
csga3l582#
实际上,你可以这样做:UPDATE TEST SET OBJECTIVE_DATA(瓦尔,'contacts',OBJECTIVE_DATA(瓦尔:contacts,'email','test',TRUE),TRUE);