RPostgreSQL 将多个 CSV 文件加载到 Postgresql table
RPostgreSQL loading multiple CSV files into an Postgresql table
我是 Postgresql 的新手,在填充我用多个 *.csv 文件创建的 table 时遇到问题。我首先在 pgAdmin4 工作,然后我决定在 RPostgreSQL 上工作,因为 R 是我的主要语言。
无论如何,我正在处理(目前)位于一个文件夹中的 30 个 csv 文件。都具有相同的 headers 和通用结构,例如:
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 特定答案来加载所有 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
)
如果我没理解错的话,我的第一个文件的名称中有一个无效参数。我不太确定,但我最近又在 R 中使用 PostgreSQL 和这个 RPostgreSQL。非常感谢任何帮助。
提前致谢!
编辑:我找到了问题,但由于某种原因无法解决。当我在 for 循环中复制路径时:
# IMPORT USING COPY COMMAND
sql <- paste("COPY citl.courses FROM '",csvfile,"' DELIMITER ',' CSV ;")
我得到以下结果:
sql
[1] "COPY citl.courses FROM ' Y:/Clickstream/test1/video-2016-04-01_PARSED.csv ' DELIMITER ',' CSV ;"
这意味着无效参数是文件路径之间的空白space。我试图改变这一点,但没有成功。任何帮助将不胜感激!
尝试这样的事情
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
)
}
我是 Postgresql 的新手,在填充我用多个 *.csv 文件创建的 table 时遇到问题。我首先在 pgAdmin4 工作,然后我决定在 RPostgreSQL 上工作,因为 R 是我的主要语言。
无论如何,我正在处理(目前)位于一个文件夹中的 30 个 csv 文件。都具有相同的 headers 和通用结构,例如:
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
...等等。
我尝试使用来自
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
)
如果我没理解错的话,我的第一个文件的名称中有一个无效参数。我不太确定,但我最近又在 R 中使用 PostgreSQL 和这个 RPostgreSQL。非常感谢任何帮助。
提前致谢!
编辑:我找到了问题,但由于某种原因无法解决。当我在 for 循环中复制路径时:
# IMPORT USING COPY COMMAND
sql <- paste("COPY citl.courses FROM '",csvfile,"' DELIMITER ',' CSV ;")
我得到以下结果:
sql
[1] "COPY citl.courses FROM ' Y:/Clickstream/test1/video-2016-04-01_PARSED.csv ' DELIMITER ',' CSV ;"
这意味着无效参数是文件路径之间的空白space。我试图改变这一点,但没有成功。任何帮助将不胜感激!
尝试这样的事情
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
)
}