2017-04-20 107 views
-1

我一直在嘗試將R服務器上的工作空間中創建的數據推送回Redshift。使用dbWriteTable(),我可以成功地創建表,但數據不被寫入到這個新創建的表中,併產生以下錯誤:將數據從R寫入Redshift問題

  • > dbWriteTable(con, c("schema", "table"), value = df,append=TRUE, 
    row.names=FALSE) 
    
    Error in postgresqlpqExec(new.con, sql4) : 
    
        RS-DBI driver: (could not Retrieve the result : ERROR: syntax error at or 
    near "STDIN" 
    LINE 1: COPY "schema"."table" FROM STDIN 
                ^
    ) 
    

    上的代碼註釋「CON」指的是紅移連接,以通用形式用於該代碼如下:

    con <- dbConnect(drv, host="host_name", 
           port="port_id", 
           dbname="db_name", 
           user="username", 
           password="password") 
    
  • 我不能得到具有充分的數據的例子,由於在th限制e數據。

最初,我認爲這可能是工作空間內的權限問題。但是,通過使用dbSendQuery()創建表,然後循環遍歷我希望通過對dbSendQuery()的另一個調用插入到Redshift中的每一行數據框,我發現了一個非常緩慢的解決方案。這告訴我這個問題必須與其他權限相關,因爲我可以低效地完成任務。

有任何意見或與此相關的錯誤的建議是非常感謝,謝謝。

回答

1

它看起來像你的客戶「R」應用程序試圖使用的Postgres COPY ... FROM STDIN語法。 Redshift COPY命令不支持「FROM STDIN」語法,請參見Redshift COPY

您可能會考慮的選項是逐行插入(就像您使用dbSendQuery()所做的那樣),但這樣做會很慢,或者將數據輸出到可上載到Amazon S3並從那裏加載的CSV文件COPY with S3 as a data source(快)。