Snowflake cloud data platform 如何从JSON文件中检索所有子节点
我有下面的JSON文件,它在外部阶段,我试图用下面的查询将一个复制查询写入表中。但是它从节点“values”获取一条记录,而我需要为values节点插入所有子元素。我已将此文件加载到一个带有variant数据类型的表中。 我正在使用的查询:Snowflake cloud data platform 如何从JSON文件中检索所有子节点,snowflake-cloud-data-platform,snowflake-schema,Snowflake Cloud Data Platform,Snowflake Schema,我有下面的JSON文件,它在外部阶段,我试图用下面的查询将一个复制查询写入表中。但是它从节点“values”获取一条记录,而我需要为values节点插入所有子元素。我已将此文件加载到一个带有variant数据类型的表中。 我正在使用的查询: select record:batchId batchId, record:results[0].pageInfo.numberOfPages NoofPages, record:results[0].pageInfo.pageNumber pageNo,
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;
您需要使用横向展平功能,如下所示: 我创建了这个表:
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"
这是否回答了您的问题:我正在尝试将数据从外部阶段加载到雪花表。我已经以JSON格式将该文件加载到一个名为lease的表中。现在,我正试图将其转换为结构化和表格格式到另一个表格中。请您提供希望在输出中看到的表格结构和示例数据?感谢所需的输出:BATCHID、NOOFPAGES、PAGENO、PGSZ、REQUESTID、SHOWPOPUP、COlMID、VAL a、1,1100000、a、FALSE、4567200-10-09T07:24:29.000ZIt符合我的要求,请解释一下“表格展平和横向展平”的工作原理。我试着浏览雪花文档,但这并没有帮助我清楚地理解HI-如果你认为我的答案有帮助,请你勾选它好吗?我绝对不是查询JSON的专家,但基本上,横向是一种连接和展平的类型,正如它所说的,展平数据,即从一行生成多行。因此,您正在执行单行数据与扁平函数生成的多行数据的笛卡尔连接。基本语法是,输入需要引用JSON中的节点,该节点具有要展平的多个子节点。此链接可能有帮助:。
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"