Snowflake cloud data platform 如何解析雪花数据库中未命名的嵌套json数组?

Snowflake cloud data platform 如何解析雪花数据库中未命名的嵌套json数组?,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我已经找到了答案,但是这个例子比我的真实例子简单。可以使用以下代码创建它: create or replace table test2 as select '5dd17ef333de385a360e0ef1' as id, parse_json('{ "_id" : "5dd17ef333de385a360e0ef1", "uid" : "5dd175d3333b85961df27c51", "task_info" : { "reps=1" : [

我已经找到了答案,但是这个例子比我的真实例子简单。可以使用以下代码创建它:

create or replace table test2 as
select '5dd17ef333de385a360e0ef1' as id,
parse_json('{
    "_id" : "5dd17ef333de385a360e0ef1",
    "uid" : "5dd175d3333b85961df27c51",
    "task_info" : {
        "reps=1" : [ 
            [ 
                {
                    "cached" : false,
                    "transform max RAM" : 51445000,
                }
            ], 
            [ 
                {
                    "cached" : false,
                    "transform max RAM" : 51445000,
                }
            ], 
            [ 
                {
                    "cached" : true,
                    "transform max RAM" : 51445000,
                }
            ]
        ]
    }
}')::variant as json_rec
;
然后我尝试解析它:

select id
, json_rec:_id::string(100) as extracted_id
, value:cached::string as cached
, value
, json_rec
  from
    test2
  , lateral flatten( input => json_rec:task_info )
;

缓存的深度显然不够深,尽管我不清楚从中提取类似这些值所需的语法。想法?

如果您希望最内层数组中的每个项都有一个单独的行,即上面的示例中的3行,那么您可以使用recursive=>true和filter on key='cached',如下所示:

select id
, json_rec:_id::string(100) as extracted_id
, value as cached
, json_rec
  from
    test2
  , lateral flatten( input => json_rec:task_info, recursive=>true)
where key='cached';

如果您希望最内层数组中的每个项都有一个单独的行,即上面示例中的3行,那么您可以使用recursive=>true和filter on key='cached',如下所示:

select id
, json_rec:_id::string(100) as extracted_id
, value as cached
, json_rec
  from
    test2
  , lateral flatten( input => json_rec:task_info, recursive=>true)
where key='cached';

您使用的是什么DBMS?Snowflake是数据库您使用的是什么DBMS?Snowflake是数据库我的原始评论中包含错误,解决方案有效,谢谢!后续-选择id,json\u rec:\u id::string100作为提取的\u id,当key='cached'时case-when-key='transform-max-RAM'时case-when-key='transform-max-RAM'后value-else-null-end作为transform\u-max-RAM,seq,key,path,index,value,这来自test2,横向平坦输入=>json\u-rec:task\u-info,recursive=>true,其中键位于“cached”,“transform max RAM”;如何表示这些相关值的组?我拥有的唯一信息似乎是路径的第一部分-但这似乎不是很优雅…您希望输出看起来如何?3行,缓存一列和一个transform\u max\u ram?最终,我将每个记录转换为3行,每个字段转换为2行,总共6行。然后我根据reps=1将这些数据透视到列中。。。由于我的数据似乎与这些值没有差异,所以我做了一个不同的操作。我的原始注释包含我的错误,解决方案有效,谢谢!后续-选择id,json\u rec:\u id::string100作为提取的\u id,当key='cached'时case-when-key='transform-max-RAM'时case-when-key='transform-max-RAM'后value-else-null-end作为transform\u-max-RAM,seq,key,path,index,value,这来自test2,横向平坦输入=>json\u-rec:task\u-info,recursive=>true,其中键位于“cached”,“transform max RAM”;如何表示这些相关值的组?我拥有的唯一信息似乎是路径的第一部分-但这似乎不是很优雅…您希望输出看起来如何?3行,缓存一列和一个transform\u max\u ram?最终,我将每个记录转换为3行,每个字段转换为2行,总共6行。然后我根据reps=1将这些数据透视到列中。。。并且做了一个不同的测试,因为我的数据似乎没有这些值的差异。