【问题标题】:dbwriteTable() seems to drop and recreate tabledbwriteTable() 似乎删除并重新创建表
【发布时间】:2019-01-12 00:38:51
【问题描述】:

我正在将数据从 R 写入 Vertica DB 的表中。我正在使用包 DBI 和 RJDBC 来执行此操作。我连接到数据库,验证表是否包含数据,删除它并在上面重写其他数据。

这是脚本

    tryCatch({verticaConn =dbConnect(vDriver, "jdbc:vertica://****/company", "***", "****")},
       error=function(e)
       {
         Logging("error",paste("Error conncecting to Vertica:",e))
       })
data<-data.frame(x=c(1,2,3),y=c(1,2,3))



 query<-"SELECT * FROM ESPDM.QUOTAZIONI_R_OUTPUT LIMIT 5"

  get_query = dbGetQuery(verticaConn,query)

  if (nrow(get_query)>0)

  {
    query<-"DELETE FROM QUOTAZIONI_R_OUTPUT"
    get_query = dbSendUpdate(verticaConn,query)


  }
dbWriteTable(verticaConn, "QUOTAZIONI_R_OUTPUT", 
                   as.data.frame(data))

该脚本运行良好,但似乎每次运行此脚本时都会删除并重新创建表,在这种情况下这是不可接受的,因为其他人正在从该表中读取并且每次创建表时他们都会失去授权。 谢谢

【问题讨论】:

  • 根据我的阅读,DELETE 本身不应该在 Vertica 中删除和重新创建表。您确定这里没有其他进程在起作用吗?
  • 非常确定,没有其他进程在工作。
  • 不使用 Vertica,我想知道没有 WHERE 的 DELETE 是否会删除表,但它们是明确的,它不会 vertica.com/docs/9.2.x/HTML/Content/Authoring/…
  • 也许你应该试试“DELETE * FROM x”
  • 从 Vertica 日志中,问题似乎出在 dbWriteTable 中...每次执行时都会删除并重新创建表...

标签: sql r


【解决方案1】:

答案:您需要指定 append=TRUE 和 overwrite=FALSE。如果您只指定 append=TRUE 而不是 overwrite=FALSE,则它不会按预期工作。

dbWriteTable(verticaConn, "QUOTAZIONI_R_OUTPUT", 
                   as.data.frame(data),append=TRUE,overwrite=FALSE)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多