2

RPostgreSQL パッケージを使用して AWS redshift クラスターに接続できます。テーブルを読み取り、SQL を使用してテーブルを作成することもできます - dbGetQuery。ただし、以下のようにdata.frameを書き込もうとすると(conはredshiftへのdbConnectオブジェクトであり、単純なdata.frameの場合はnewdfです)

dbWriteTable(con,"newtb",newdf)

次のエラーが表示されます。

postgresqlgetResult(new.con) のエラー: RS-DBI ドライバー: (結果を取得できませんでした: エラー: LOAD ソースはサポートされていません。(ヒント: S3 または DynamoDB ベースのロードのみが許可されます)

複数の単純なdata.framesを試しましたが、data.frameの読み取りは機能しますが、書き込みは機能しません。ヒントは、読み込みに s3 を使用するように指示しています。つまり、明示的な挿入を使用しない限り、R でデータを処理できますが、data.frame を redshift に書き戻すことはできません。私が間違っていることはありますか?または、これがredshiftがs3の使用を禁止または強制する固有の方法である場合

4

1 に答える 1

1

RODBC パッケージを使用して解決しました。

ODBC 接続をセットアップする必要があります。これを redshift_con と呼びましょう。Rから、次を使用して接続を作成する必要があります(私はそれをchと呼びました):

ch <- odbcConnect("Annalect DB", uid = "ユーザー名", pwd = "**")

私のデータフレームをRにロードして実行しました:

sqlSave(ch, mydataframename, addPK = TRUE, verbose = TRUE)

そして、R は「mydataframename」と呼ばれる redshift に新しいテーブルを作成します。非常に高速ではありません。最適化された方法を見つけたら更新します。

詳細情報が必要な場合は、http://cran.r-project.org/web/packages/RODBC/index.htmlを参照してください。

################ SAMPLE CODE FOR TESTING ##############
install.packages("RODBC")
library('RODBC')
ch <- odbcConnect("redshift_con", uid = "admin", pwd = "********")
sqlColumns(ch, "public.r_test")
USArrest<-data(USArrests)
sqlSave(redshift_con, USArrests, rownames = "State", addPK = TRUE, verbose = TRUE)
I'll post a comment on the process speed.

それが役立つことを願っています。

アップデート

非常に少量のデータにのみ適しています

于 2014-09-11T12:34:22.017 に答える