sql >> データベース >  >> RDS >> PostgreSQL

RPostgreSQL-AmazonRedshiftへのR接続-より大きなデータセットを書き込む/投稿する方法

    OPには遅すぎるかもしれませんが、誰かが同じ問題を見つけた場合に後で参照できるように、ここに投稿します:

    一括挿入を行う手順は次のとおりです。

    • データフレームと同じ構造でRedshiftにテーブルを作成します
    • データをN個の部分に分割します
    • パーツをRedshiftで読み取り可能な形式に変換します
    • すべてのパーツをAmazonS3にアップロードします
    • RedshiftでCOPYステートメントを実行します
    • AmazonS3の一時ファイルを削除します

    最初のステップを除いて、これを正確に実行するRパッケージを作成しました。これはredshiftToolsと呼ばれます: https: //github.com/sicarul/redshiftTools

    パッケージをインストールするには、次のことを行う必要があります。

    install.packages('devtools')
    devtools::install_github("RcppCore/Rcpp")
    devtools::install_github("rstats-db/DBI")
    devtools::install_github("rstats-db/RPostgres")
    devtools::install_github("hadley/xml2")
    install.packages("aws.s3", repos = c(getOption("repos"), "http://cloudyr.github.io/drat"))
    devtools::install_github("sicarul/redshiftTools")
    

    その後、次のように使用できるようになります:

    library("aws.s3")
    library(RPostgres)
    library(redshiftTools)
    
    con <- dbConnect(RPostgres::Postgres(), dbname="dbname",
    host='my-redshift-url.amazon.com', port='5439',
    user='myuser', password='mypassword',sslmode='require')
    
    rs_replace_table(my_data, dbcon=con, tableName='mytable', bucket="mybucket")
    rs_upsert_table(my_other_data, dbcon=con, tableName = 'mytable', bucket="mybucket", keys=c('id', 'date'))
    

    rs_replace_table ターゲットテーブルを切り捨ててから、データフレームから完全にロードします。これは、保持している現在のデータを気にしない場合にのみ行ってください。一方、rs_upsert_table 一致するキーを持つ行を置き換え、テーブルに存在しない行を挿入します。




    1. Django:バッファリングされていないmysqlクエリ

    2. MyBatis<挿入>マップされたメソッドからの戻り値

    3. 何百万ものエントリでランキング

    4. C++を使用してmySQLデータベースに接続する方法