2017-08-14 86 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腳本來完成它。 –