Error in Dataframe writing from R to Redshift

て烟熏妆下的殇ゞ 提交于 2019-12-11 09:07:30

问题


I have a dataframe in R with various different data types. While writing the dataframe from R to redshift server, I am getting error only with character and timestamp values. I am adding R code snippet below to give you more idea about the issue.

library(lubridate)
library(dplyr)

dat <- data.frame(id = letters[1:2], x = 2:3, date = now())
dat
str(dat)

drv <- dbDriver("PostgreSQL")
conn <- dbConnect(drv, host="redshift.amazonaws.com", port="5439", dbname="abcd", user="xyz", password="abc")

DBI::dbGetQuery(conn, "DROP TABLE test21;")
DBI::dbGetQuery(conn, "CREATE TABLE test21 ( id VARCHAR(255), x INT, date timestamp);")

chunksize = 100 

for (i in 1:ceiling(nrow(dat)/chunksize)) { 
query = paste0('INSERT INTO test21 (',paste0(colnames(dat),collapse = ','),') VALUES ')
  vals = NULL
  for (j in 1:chunksize) {
    k = (i-1)*chunksize+j
    if (k <= nrow(dat)) {
      vals[j] = paste0('(', paste0(dat[k,],collapse = ','), ')')
    }
  }
  query = paste0(query, paste0(vals,collapse=','))
  DBI::dbExecute(conn, query)
}

While running the last part, I am getting the below error:

  RS-DBI driver: (could not Retrieve the result : ERROR:  column "date" is of type timestamp without time zone but expression is of type numeric
HINT:  You will need to rewrite or cast the expression.

When I manually entered the values into the redshift table, it came as expected.

DBI::dbGetQuery(conn, "INSERT INTO test21 (id, x, date) values ('a','2','2019-02-08 15:21:08'),('b','3','2019-02-08 15:21:08')")

I am sensing that this issue is coming from some programmatic error. requesting your advise on the same where I am doing wrong with the code.


回答1:


In the date field of your dataframe, try replacing

now()

with

substr(now(), 1, 19)



来源:https://stackoverflow.com/questions/54590667/error-in-dataframe-writing-from-r-to-redshift

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!