我们在雪花列内的json对象中存储了大量的值/对。 值/对的数量未预先定义(因此为半结构化数据)
更新值对之一有什么选择?
我应该提取整个JSON,将其转换为字符串,修改字符串并完全更新对象列吗?
还是有一个不错的小功能,我可以只更新想要的一对?
create or replace table TB as
select $1 TB_ID, parse_json($2) my_json
from values
(1, '{ "FruitShape":"Round", "FruitSize":55 } '),
(2, '{ "FruitShape":"Square" } '),
(3, '{ "FruitShape":"Oblong", "FruitSize":22, "FruitColor":"Chartreuse" })
;
这创建了3行,每行最多3个值/对。
假设我想将第一行的属性从“圆形”更改为“正方形”
UPDATE TB
SET my_json = parse_json('{ "FruitShape":"square", "FruitSize":55 }')
WHERE TB_ID = 1;
这是我应该做的吗?
答案 0 :(得分:0)
您不应该尝试更新,只需添加新行,然后使用视图访问当前值即可。
答案 1 :(得分:0)
您可以使用javascript UDF来实现。例如:
create or replace function merge_objects("a" object, "b" object)
returns object
language javascript
as
$$
return {...a, ...b}
$$;
然后这样呼叫:
select merge_objects(
object_construct('a',1,'b',2),
object_construct('b',3,'c',4)
);
select merge_objects(
parse_json('{"a":1,"b":[1,2,3]}')::object,
parse_json('{"c":2,"b":[2,3,4]}')::object
);