【问题标题】:Flatten and reconstruct JSON Snowflake展平和重构 JSON 雪花
【发布时间】:2021-07-16 08:37:17
【问题描述】:

我仍在学习 Snowflake,任何帮助将不胜感激。

我有一个专栏,我们称之为“结果”。

{
  "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
}

我想将其展平并重建如下

[
  {
    "datetime": 161878993658,
    "url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179361.jpg"
  },
  {
    "datetime": 161878993658,
    "url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179330.jpg"
  },
  {
    "datetime": 161878993658,
    "url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179362.jpg"
  },
]

【问题讨论】:

  • 只是为了确保:此列是表的一部分,是变体类型,并且包含与上面类似的对象?桌子看起来怎么样?
  • 那是正确的,表格只有上面的变量类型列
  • 我刚刚添加了“catalog_id”@FelipeHoffa
  • 可能 JS-UDF 将是解决这个问题的最快方法docs.snowflake.com/en/sql-reference/udf-js.html

标签: sql arrays json snowflake-cloud-data-platform querying


【解决方案1】:

以下将执行此操作。您不需要 CTE,因此请将其删除并将 tbl 的使用替换为您的表名称,并将 json 的使用替换为您的变体列。

/*delete this line*/ with tbl as (select parse_json($1) json from values('{"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}'))

select array_agg(new_col) reconstructed
from (
  /* replace json and tbl */ select object_construct('datetime', json:datetime, 'url', obj.value:img_href) new_col, json:catalog_id catalog_id
  from tbl, lateral flatten(json:catalog) obj
) group by catalog_id;

输出

[
  {
    "datetime": 161878993658,
    "url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179361.jpg"
  },
  {
    "datetime": 161878993658,
    "url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179330.jpg"
  },
  {
    "datetime": 161878993658,
    "url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179362.jpg"
  }
]

【讨论】:

    猜你喜欢
    • 2021-07-23
    • 1970-01-01
    • 2020-09-16
    • 2021-12-18
    • 2021-06-25
    • 2022-01-21
    • 2021-08-16
    • 1970-01-01
    • 2020-09-12
    相关资源
    最近更新 更多