雪花解析多行 JSON



对Snowflake来说相当新,但已经通过各种方法成功加载了数据。

问题: 我使用分页规则通过 Azure 数据工厂调用 Web API,以写入 blob 存储中的单个 JSON 文件。这是通过单个 ADF 数据复制活动进行多次调用来完成的,该活动利用 AbsoluteURL 合并到单个文件(我可以编写额外的复杂 ADF 逻辑来生成多个文件,但对于此示例,希望使用单个文件方法)。这在我的 ADF 管道中非常有效,我可以作为数组或一组对象进行写入。

ADF 部分运行良好,但是在通过阶段加载到 Snowflake 中的行表中时,我在解析"合并"的 JSON 文件时遇到了问题。

对于 ADF JSON 接收器设置,名为"setOfObjects.json"的输出 JSON 文件如下所示:setOfObjects(JSON 行):

{"values":[{"a":"1","b":"1","c":"1"},{"a":"2","b":"2","c":"2"}]}
{"values":[{"a":"3","b":"3","c":"3"},{"a":"4","b":"4","c":"4"}]}
<empty line>

在《雪花》中,我创造了一个舞台,例如

create or replace stage dbo.stage_json_example url = 'azure://<endpoint>.blob.core.windows.net/test/stackOverflow/'
credentials = (azure_sas_token = '<sas_token>')
file_format = (type = 'json');

然后在 Snowflake 中,我尝试解析 JSON 文件,例如,但它返回 NULL 值:

select $1:values:a::string
from @dbo.stage_json_example/setOfObjects.json;

从上面,我想将单个 JSON 文件转换为 4 行,即:

12 23 34
abc
11
2
3
44

好的,从这个链接中找到答案 https://community.snowflake.com/s/article/json-data-parsing-in-snowflake

这个雪花代码解决了这个问题。

select t.value:a::int as "a", t.value:b::int as "b", t.value:c::int  as "c"
from @dbo.stage_json_example/setOfObjects.json as S
, table(flatten(S.$1,'values')) t;

也许你试图在文档的开头写一个{,在文档的末尾写一个}。JSON 始终需要文档根目录。通过此更改,您有一个。

所以你的示例看起来像:

{
{"values":[{"a":"1","b":"1","c":"1"},{"a":"2","b":"2","c":"2"}]}
{"values":[{"a":"3","b":"3","c":"3"},{"a":"4","b":"4","c":"4"}]} 
}

相关内容

  • 没有找到相关文章

最新更新