2017-08-14 79 views
0

我试图加载具有多个值的JSON文件中的一列使用copy命令红移,但得到一个错误“无效JSONPath格式:会员是不是一个对象。 “从S3多个值拷贝JSON红移

这是我的JSON文件看起来像:

{"id":3, 
"name":"John", 
"children":[ 
{"child":"Ann","age":10}, 
{"child":"Dan","age":4}, 
{"child":"Ben","age":3}] 
} 

这是我的jsonpath文件:

{ 
    "jsonpaths": [ 
     "$.id", 
     "$.name", 
     "$.children.child", 
     "$.children.age" 
    ] 
} 

,我希望在SQL中的数据显示:

id  name  child age  
--  ----  ----- --- 

3  John  Ann  10 

3  John  Dan  4 

3  John  Ben  3 

任何想法有人吗?

回答

0

COPY中的JSONPaths只会在输入文件的每个条目(或行)中创建一行。在上面的示例中,您希望从一个条目创建3行,而Redshift不支持该行。

你可以考虑预处理的数据,将其转换为这样的事情:

{ 
    "id":3, 
    "name":"John", 
    "child":"Ann", 
    "age":10 
}, 
{ 
    "id":3, 
    "name":"John", 
    "child":"Dan", 
    "age":4 
}, 
{ 
    "id":3, 
    "name":"John", 
    "child":"Ben", 
    "age":3 
} 

然后,下面简单JSONPath将工作:

{ 
    "jsonpaths": [ 
     "$.id", 
     "$.name", 
     "$.child", 
     "$.age" 
    ] 
} 
+0

谢谢您的答复。我们的问题是,我们正试图通过S3加载从MongoDB到Redshift的BSON集合,我们正在努力做到这一点。由于mongo dump只能创建(嵌套的)BSON文件,我们试图将其转换为JSON,所以我们得到了这些括号。您是否知道使用复制命令**不使用ETL工具**从S3到Redshift加载BSON文件的最佳实践? – RoS

+0

最好就此提出另一个问题。作为一个快速回答,我会尝试编写一个bash/python脚本来完成它。 –