json 展平不带键的半结构化数据:值对-雪花

xfyts7mz  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(161)

我有一个数组json数据加载到雪花的形式:
[[列1、列2、列3、列4]、[a1、a2、a3、a4]、[b1、b2、b3、b4]、[c1、c2、c3、c4]......等]
数组当前作为表data_table读入snowflake的数组,1行(上面的数组)1列,假想命名为data_array
我需要展开数组,使第一个元素是列标题,列值后面的元素是列标题。
| 第1列|第2列|第3列|第4列|
| - ------|- ------|- ------|- ------|
| a1| a2| a3| a4|
| b1| b2| b3| b4|
我能找到的唯一的扁平化解决方案使用键值对中的数据,例如{[col 1:a1,col 2:a2..],[col 1:b1,col 2:b2..].. etc}。
我怎么去把这个数据类型展平成雪花呢?

wn9m85ua

wn9m85ua1#

我怀疑这并不是你想要的,但希望它能成为你的起点?

select
    GET(s.value::ARRAY, 0)::varchar as col1,
    GET(s.value::ARRAY, 1)::varchar as col2,
    GET(s.value::ARRAY, 2)::varchar as col3,
    GET(s.value::ARRAY, 3)::varchar as col4
from
    json_2 j,
    lateral flatten (input => j.src, mode => 'ARRAY') s
    -- lateral flatten (input => s.value, path => '', mode => 'ARRAY') s2
having
    col1 != 'col1'
;

这将产生您所需的输出。如果您可以提供更多的细节,关于进一步的要求,我可能能够进一步完善这一点。
生成测试数据集的代码:

create or replace table play.ground.json_2 (src variant);

insert into play.ground.json_2(src) select parse_json($$
[["col1", "col2", "col3", "col4"], ["a1", "a2", "a3", "a4"], ["b1", "b2", "b3", "b4"], ["c1", "c2", "c3", "c4"]]
$$);

select * from json_2;

相关问题