对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 行,即:
a | b | c |
---|---|---|
1 | 1 | |
2 | ||
3 | ||
4 | 4 |
好的,从这个链接中找到答案 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"}]}
}