RPostgreSQL 将多个 CSV 文件加载到 Postgresql 表中

标签 r postgresql csv rpostgresql

我是 Postgresql 的新手,在填充我用多个 *.csv 文件创建的表时遇到问题。我首先在 pgAdmin4 工作,然后我决定在 RPostgreSQL 上工作,因为 R 是我的主要语言。

无论如何,我正在处理(目前)位于一个文件夹中的 30 个 csv 文件。都具有相同的 header 和一般结构,例如:

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

...等等。

我尝试使用来自 Parfait 的 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 ;"

这意味着无效参数是文件路径之间的空格。我试图改变这一点,但没有成功。任何帮助将不胜感激!

最佳答案

尝试这样的事情

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
    )

}

关于RPostgreSQL 将多个 CSV 文件加载到 Postgresql 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42428190/

相关文章:

postgresql - 如何要求 Postgres 报告损坏的值(value)?

Django 查询集

postgresql - 模拟多对多关系的最佳方式是什么

r - 使用 `fread` 将 csv 文件从存档导入 `R` 而不提取到磁盘

python - 从 S3 将 CSV 加载到 PySpark

R - 将时间序列与不同频率对齐

r - 检查 data.frame 列中的任何值是否为空

r - 如何去除R包 “levelplot”中 “rasterVis”中的框框

PHP:如何将 CSV 文件的内容逐行导入 MySQL 数据库?

r - 相当于 tidyverse 生态系统中的 by