在雪花/ SQL中根据JSON数据子数组创建表

问题描述

我在雪花中有一个表(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数据?

谢谢您的帮助。

解决方法

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

但是,由于您实际上没有两个作者,因此无法在纯JSON中实现所需的功能:您只有一个名称字段,其值为“ Jim Bob,Jimothy Bob”。为了以您想要的方式拆分数据,JSON需要看起来像这样:

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

为了实现所需的功能,需要将数据写入表,将JSON拆分为列,将值“ Jim Bob,Jimothy Bob”留在单列中,然后拆分该列(例如,使用SPLIT_TO_TABLE之类的东西),然后将您的数据结合在一起以得到所需的结果

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...