亚马逊redshift复制命令json格式

时间:2017-03-31 15:38:16

标签: json amazon-redshift

我正在尝试使用以下结构将一些json文件复制到Redshift中:

{
"data": [{
    "attr1": "value1",
    "attr2": "value2",
    "attr3": "value3",
},
{
    "attr1": "value4",
    "attr2": "value5",
    "attr3": "value6",
}]
}

数组元素的数量是可变的。

我尝试使用以下jsonpath,但它不起作用:

{
"jsonpaths": [
    "$.data[*].attr1",
    "$.data[*].attr2",
    "$.data[*].attr3"
]
}

如果我使用以下jsonpath,它只加载数组中的第一个对象:

{
"jsonpaths": [
    "$.data[0].attr1",
    "$.data[0].attr2",
    "$.data[0].attr3"
]
}

有办法做到这一点吗?

谢谢!

1 个答案:

答案 0 :(得分:3)

您的数据结构不太对劲。对于jsonpaths加载Redshift实际上并不希望整个文件是一个json结构。每条记录都是自己的结构。所以没有逗号分隔记录。

每条记录的顶级元素可以是所有对象{}或数组[],但记录是完整的json结构,并且由换行符而不是逗号分隔。查看this page以获取示例。

对于你的例子:

{"data": {
    "attr1": "value1",
    "attr2": "value2",
    "attr3": "value3"
}}
{"data": {
    "attr1": "value4",
    "attr2": "value5",
    "attr3": "value6"
}}

{"jsonpaths": ["$.data.attr1", "$.data.attr2", "$.data.attr3"]}

或只是:

{
    "attr1": "value1",
    "attr2": "value2",
    "attr3": "value3"
}
{
    "attr1": "value4",
    "attr2": "value5",
    "attr3": "value6"
}

{"jsonpaths": ["$.attr1", "$.attr2", "$.attr3"]}