我仍在学习雪花,任何帮助将不胜感激
我有一个表(tbl1),它有一个变体列(column_json),如下所示:
{
"catalog": [
{
"img_href": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179361.jpg",
"name": "ADITI HAND BLOCKED PRINT",
"price": 16
},
{
"img_href": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179330.jpg",
"name": "TORBAY HAND BLOCKED PRINT",
"price": 17
},
{
"img_href": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179362.jpg",
"name": "ADITI HAND BLOCKED PRINT",
"price": 18
}
],
"datetime": 161878993658
"catalog_id": 1
}
我正在尝试向目录数组中的对象添加新的键值对。因此,我使用更新查询来更新。
这是我的更新查询:
UPDATE tbl1
SET column_json:catalog[0] = object_insert(column_json:catalog[0], 'item_href', 'https://fschumacher.com/178791')
WHERE column_json:catalog_id = '1'
但是我面临以下错误
SQL compilation error: syntax error line 2 at position 20 unexpected ':'.
答案 0 :(得分:0)
UPDATE 仅支持列操作,因此您的方法不起作用。
重建目录,如下所示,会起作用(但它确实让我停下来想知道是否有更好的方法。)
UPDATE tbl1
SET column_json = new_catalog
FROM (select object_construct('catalog_id', catalog_id, 'datetime', any_value(datetime), 'catalog', array_agg(new_col)) new_catalog from (select column_json:datetime datetime, column_json:catalog_id catalog_id, iff(c.index = 0 and column_json:catalog_id = '1', object_insert(column_json:catalog[0], 'item_href', 'https://fschumacher.com/178791', true), c.value) new_col from tbl1, lateral flatten(column_json:catalog) c) group by catalog_id)
WHERE column_json:catalog_id = '1';
--This results in the following:
--select column_json:catalog[0].item_href from tbl1;
--"https://fschumacher.com/178791"