微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

压平和重建 JSON 雪花

如何解决压平和重建 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","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"
  },"url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179362.jpg"
  },]

解决方法

以下将执行此操作。您将不需要 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","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"
  },"url": "https://schumacher-webassets.s3.amazonaws.com/Web%20Catalog-600/179362.jpg"
  }
]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。