【发布时间】: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 中...每次执行时都会删除并重新创建表...