2017-04-20 13 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") 
    
  • 私は番目の制約に起因するデータとの完全な例を与えることができませんeデータ。

元々、私はそれが作業スペース内のアクセス権の問題である可能性があると思っていました。しかし、私はdbSendQuery()を使用してテーブルを作成し、dbSendQuery()の別の呼び出しでRedshiftに挿入したいデータフレームの各行をループすることで極端に遅い解決策を見つけました。これは、タスクを効率的に完了できないため、権限が他のものと関連している必要があることを示しています。

このエラーに関するご意見やご提案は大変ありがとうございます。ありがとうございます。

答えて

1

クライアント "R"アプリケーションがPostgres COPY ... FROM STDIN構文を使用しようとしているようです。 "FROM STDIN"は、Redshift COPYコマンドの構文はサポートされていません。Redshift COPYを参照してください。

(dbSendQuery()で行っていたように)行単位で挿入することが考えられますが、これは遅くなります。また、Amazon S3にアップロードできるCSVファイルにデータを出力したり、 COPY with S3 as a data source(高速)。

関連する問題