2017-02-23 7 views
1

Postgresqlを使用するのが初めてで、複数の* .csvファイルで作成したテーブルを作成するのに問題があります。私はまずpgAdmin4で作業していましたが、Rが私の主要言語であるためRPostgreSQLに取り組むことにしました。RPostgreSQL Postgresqlテーブルに複数のCSVファイルをロードする

とにかく、私は1つのフォルダにある30のcsvファイルを扱っています。すべてが同じヘッダーと一般的な構造を持っています。例えば、

Y:/Clickstream/test1/video-2016-04-01_PARSED.csv 
Y:/Clickstream/test1/video-2016-04-02_PARSED.csv 
Y:/Clickstream/test1/video-2016-04-03_PARSED.csv 

...などです。

次のRPostgresql固有の回答をParfaitから使用して、すべてのcsvファイルをロードしようとしました。残念ながら、それはうまくいきませんでした。私は私が得たエラーを理解していないよ

library(RPostgreSQL) 

dir = list.dirs(path = "Y:/Clickstream/test1") 
num = (length(dir)) 

psql.connection <- dbConnect(PostgreSQL(), 
        dbname="coursera", 
        host="127.0.0.1", 
        user = "postgres", 
        password="xxxx") 

for (d in dir){ 
    filenames <- list.files(d) 

for (f in filenames){ 
    csvfile <- paste0(d, '/', f) 

# IMPORT USING COPY COMMAND 
sql <- paste("COPY citl.courses FROM '", csvfile , "' DELIMITER ',' CSV ;") 
dbSendQuery(psql.connection, sql) 

    } 
} 

# CLOSE CONNNECTION 
dbDisconnect(psql.connection) 

::私のコードを下に指定されている

Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : ERROR: could not open file 
" Y:/Clickstream/test1/video-2016-04-01_PARSED.csv " for reading: Invalid 
argument 
) 

私が正しく理解していた場合には、私の最初のファイルの名前に無効な引数があります。私はそれについてはよく分かりませんが、私は最近PostgreSQLとRPostgreSQLをRで使用しています。どんな助けでも大歓迎です。

ありがとうございます!

編集:問題は見つかりましたが、何らかの理由で解決できません。私は次の結果を持って

# IMPORT USING COPY COMMAND 
sql <- paste("COPY citl.courses FROM '",csvfile,"' DELIMITER ',' CSV ;") 

::私は、forループ内ながらパスをコピーすると

sql 
[1] "COPY citl.courses FROM ' Y:/Clickstream/test1/video-2016-04-01_PARSED.csv ' DELIMITER ',' CSV ;" 

これは、無効な引数は、ファイルパスの間に空白であることを意味しています。私はこれを失敗に変えようとしました。どんな助力も深く感謝します!

+0

1. COPYコマンドサーバー上で実行し、ファイルには、サーバー上になければなりませんのようなものを試してみてください。 2.ファイルの権利をチェックしてください。 'postgres'ユーザ –

+0

こんにちは。ご意見ありがとうございました。私はpsqlについてよく知らないので、あなたの2つの答えを理解するのに少し問題があります。私がそれらを解釈して間違っている場合は、私を修正してください:1)あなたはサーバー上にファイルを持っていることはどういう意味ですか?私は実際にすべてのファイルをサーバ上に持っていますが、psqlにまだロードされていません。 2)私はスーパーユーザーで、データベースにすべての権限を持っています。私は自分のファイルがあるサーバーで管理者権限も持っています。 – lescobedo21

答えて

0

この

Files <- list.files("Y:/Clickstream/test1", pattern = "*.csv", full.names = TRUE) 

CSVs <- lapply(Files, read.csv) 

psql.connection <- dbConnect(PostgreSQL(), 
        dbname="coursera", 
        host="127.0.0.1", 
        user = "postgres", 
        password="xxxx") 


for(i in 1:length(Files)){ 

    dbWriteTable(psql.connection 
    # schema and table 
    , c("citl", "courses") 
    , CSVs[i] 
    , append = TRUE # add row to bottom 
    , row.names = FALSE 
    ) 

} 
+1

こんにちはJackStat。ご回答有難うございます。私は最大11ギガバイト(テストフォルダのみ)を追加するので、Rのファイルを読み込まないようにしようとしています。もし彼らが "重い"ものではなかったら、あなたのコードは私の場合にはうまくいくでしょう。私の目的は、ファイルをpsqlに読み込んで処理を高速化することでした。もう一度、ありがとう! – lescobedo21

関連する問題