更新查询:雪花表变体列

时间:2021-04-23 04:52:31

标签: sql arrays json snowflake-cloud-data-platform insert-update

我仍在学习雪花,任何帮助将不胜感激

我有一个表(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 ':'.

1 个答案:

答案 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"