我在雪花中有一个表(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数据?
谢谢您的帮助。
答案 0 :(得分:-1)
在您的“期望结果”中,我假设您有错误的编辑和作者列-如在JSON中,具有两个值的是作者,而不是编辑器?
但是,由于您实际上没有两个作者,因此无法在纯JSON中实现所需的功能:您只有一个名称字段,其值为“ Jim Bob,Jimothy Bob”。为了以您想要的方式拆分数据,JSON需要看起来像这样:
"authors": [
{
"names":{
"name1": "Jim Bob"
"name2": "Jimothy Bob"
}
}
],
为了实现所需的功能,需要将数据写入表,将JSON拆分为列,将值“ Jim Bob,Jimothy Bob”留在单列中,然后拆分该列(例如,使用SPLIT_TO_TABLE之类的东西),然后将您的数据结合在一起以得到所需的结果