如何从 JSON 文件中检索所有子节点

How to retrieve all child nodes from JSON file

我有以下 JSON 文件,它在外部阶段,我正在尝试使用以下查询将复制查询写入 table。但它从节点“值”获取单个记录,而我需要为值节点插入所有子元素。我已将此文件加载到具有变体数据类型的 table 中。 我正在使用的查询:

select record:batchId batchId, record:results[0].pageInfo.numberOfPages NoofPages, record:results[0].pageInfo.pageNumber pageNo,
record:results[0].pageInfo.pageSize PgSz, record:results[0].requestId requestId,record:results[0].showPopup showPopup,
record:results[0].values[0][0].columnId columnId,record:results[0].values[0][0].value val
from lease; 
{
    "batchId": "",
    "results": [
        {
            "pageInfo": {
                "numberOfPages": ,
                "pageNumber": ,
                "pageSize": 
            },
            "requestId": "",
            "showPopup": false,
            "values": [
                [
                    {
                        "columnId": ,
                        "value": ""
                    },
                    
                    {
                        "columnId": ,
                        "value": 
                    }
                ]
            ]
        }
    ]
}

你需要使用 LATERAL FLATTEN 函数,像这样:

我创建了这个 table:

create table json_test (seq_no integer, json_text variant);

然后用这个 JSON 字符串填充它:

insert into json_test(seq_no, json_text)
select 1, parse_json($${
    "batchId": "a",
    "results": [
        {
            "pageInfo": {
                "numberOfPages": "1",
                "pageNumber": "1",
                "pageSize": "100000"
            },
            "requestId": "a",
            "showPopup": false,
            "values": [
                [
                    {
                        "columnId": "4567",
                        "value": "2020-10-09T07:24:29.000Z"
                    },
                    
                    {
                        "columnId": "4568",
                        "value": "2020-10-10T10:24:29.000Z"
                    }
                ]
            ]
        }
    ]
}$$);

然后查询如下:

select 
json_text:batchId batchId
,json_text:results[0].pageInfo.numberOfPages numberOfPages
,json_text:results[0].pageInfo.pageNumber pageNumber
,json_text:results[0].pageInfo.pageSize pageSize
,json_text:results[0].requestId requestId
,json_text:results[0].showPopup showPopup
,f.value:columnId columnId
,f.value:value value
from json_test t
,lateral flatten(input => t.json_text:results[0]:values[0]) f;

给出了这些结果——我认为这大致就是您正在寻找的结果:

BATCHID    NUMBEROFPAGES    PAGENUMBER    PAGESIZE    REQUESTID    SHOWPOPUP    COLUMNID    VALUE
"a"        "1"              "1"           "100000"    "a"          false        "4567"      "2020-10-09T07:24:29.000Z"
"a"        "1"              "1"           "100000"    "a"          false        "4568"      "2020-10-10T10:24:29.000Z"