我在 redshift 中使用复制命令加载 JSON 对象时遇到问题,我收到以下 JSON 格式的文件,该文件在尝试使用复制命令时失败,但是当我将 json 文件调整到底部时它可以工作。这不是一个理想的解决方案,因为我不允许修改 JSON 文件
这个效果很好:
{
"id": 1,
"name": "Major League Baseball"
}
{
"id": 2,
"name": "National Hockey League"
}
这不起作用(注意额外的方括号)
[
{"id":1,"name":"Major League Baseball"},
{"id":2,"name":"National Hockey League"}
]
这是我的json路径
{
"jsonpaths": [
"$['id']",
"$['name']"
]
}
COPY
命令的问题是它并不真正接受有效的JSON文件。相反,它需要一个每行 JSON,这在文档中显示,但没有明显提及。
因此,每一行都应该是有效的 JSON,但完整文件却不是。这就是为什么当您修改文件时,它会起作用。
问题出在括号上。以下是假设整个文件小于 16mb 的解决方法:
SET json_parse_truncate_strings=ON; --not necessarily needed but helpful
create table temptable(entirefile super);
copy temptable
from 's3://bucket/file.json'
iam_role '...'
format json 'noshred';
create mytable as
select data from temptable t, t.entirefile data;