【问题标题】:Update Query: Snowflake table variant column更新查询:雪花表变体列
【发布时间】:2021-07-17 07:42:36
【问题描述】:

我还在学习 Snowflake,非常感谢任何帮助

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

【问题讨论】:

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


【解决方案1】:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 2021-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2021-06-04
    • 2022-01-04
    相关资源
    最近更新 更多