【问题标题】:Creating a table from JSON data sub arrays within in snowflake/SQL从雪花/SQL 中的 JSON 数据子数组创建表
【发布时间】:2020-12-01 16:27:25
【问题描述】:

我在雪花中有一个表 (table_1),它有 3 列。第一列是 JSON 数据,其中包含数组。这是“JSON”列中一个值的示例:

{
  "authors": [
    {
      "name": "Jim Bob, Jimothy Bob"
    }
  ],
  "date": 1578352260,
  "publishers": [
    {
      "name": "Bob Jim"
    }
  ],
  "title": "A Look at Ants Through The Ages",
  "editors": [
    {
      "name": "Jim Bobby"
    }
  ]
}

现在,我正在尝试将所有这些取消嵌套并将其展平到一个新表中,但每次我这样做只是创建一个包含 0 行和 0 个数据的表。这是我尝试这样做的方法:

create or replace table table_2 as
    select
    json:editors::varchar as editors,
    json:authors::varchar as authors,
    json:publishers::varchar as publishers,
    json:date::varchar as date,
    json:title::varchar as title
    from table_1,
        lateral flatten(input=>json:table_1);

想要的结果是

    editors    authors  publishers  date                 title
   Jim Bobby   Jim Bob  Bob Jim    1578352260  A Look at Ants Through The Ages
   Jimothy Bob Jim Bob  Bob Jim    1578352260  A Look at Ants Through The Ages

实际结果是一个成功创建的空表。

如何展平这些 JSON 数据?

感谢您的帮助。

【问题讨论】:

  • 为什么要在输出中包含两行?然后,您应该将每个名称放在作者数组中的不同元素中,而不是用逗号分隔。
  • @JaimeDrq 我无法选择获取此 JSON 文件的方式。然而,我的任务是让它看起来像预期的结果。
  • 那么该路径中的数组用途是什么?

标签: sql json snowflake-cloud-data-platform create-table flatten


【解决方案1】:

在您的“期望结果”中,我假设您的 editors 和 authors 列是错误的 - 因为在 JSON 中,作者有两个值,而不是编辑器?

但是,您无法在纯 JSON 中实现您想要的,因为您实际上并没有两个作者:您只有一个名称字段,其值为“Jim Bob, Jimothy Bob”。为了以您希望的方式拆分数据,JSON 需要如下所示:

"authors": [
{
  "names":{
    "name1": "Jim Bob"
    "name2": "Jimothy Bob"
   }
}
],

为了实现您想要的内容,您需要写入表,将 JSON 拆分为列,将值“Jim Bob,Jimothy Bob”留在单个列中,然后拆分该列(例如,使用类似 SPLIT_TO_TABLE ) 并将您的数据连接在一起以获得所需的结果

【讨论】:

  • 为什么不用数组作为数组,而不是在子文档中创建name1、name2、...、name n?
猜你喜欢
  • 2021-07-07
  • 1970-01-01
  • 2022-08-04
  • 1970-01-01
  • 2021-08-18
  • 2022-11-22
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
相关资源
最近更新 更多