更新嵌套JSON属性Snowflake

roejwanj  于 2023-10-21  发布在  其他
关注(0)|答案(2)|浏览(117)

我正在尝试更新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"
    }
  ]
}
hyrbngr7

hyrbngr71#

下面是我已经尝试过,并正在工作,但不说服我作为一个理想的解决方案.我愿意接受更多的建议。
步骤1a:创建一个动态生成键和jpath的存储过程。
使用横向扁平递归。对于每个键,捕获JPATH。
步骤1b:在过程中创建一个函数,该函数捕获我希望更新的所有属性
创建一个函数来执行下面的操作,
V. =“"(默认为空字符串)
步骤2:使用自定义函数更新JSON。动态生成函数的原因是Snowflake Function不接受JPATH作为函数的参数。

csga3l58

csga3l582#

实际上,你可以这样做:UPDATE TEST SET OBJECTIVE_DATA(瓦尔,'contacts',OBJECTIVE_DATA(瓦尔:contacts,'email','test',TRUE),TRUE);

相关问题