DBI 包中的 dbWriteTable 函数抛出错误

Posted

技术标签:

【中文标题】DBI 包中的 dbWriteTable 函数抛出错误【英文标题】:dbWriteTable function in DBI package is throwing an error 【发布时间】:2019-01-07 08:33:06 【问题描述】:

我正在尝试使用 DBI 包中的 dbWriteTable 函数将数据帧上传到 presto 服务器。它抛出以下错误:

“.verify.JDBC.result 中的错误(r,“无法检索 JDBC 表列表”): 无法检索 JDBC 表列表 ()"

我也尝试过在 dbSendQuery 中使用插入、创建、删除命令和相同的连接,它运行良好。我在使用 dbWriteTable 函数时遇到问题。

我已经尝试过 DBI 包的其他功能,例如 dbReadTable、dbCreateTable,这对我来说非常有效

代码:

dbWriteTable(conn,DBI::SQL("test.demo"),value =  df)

【问题讨论】:

检查已连接用户的权限。 dbWriteTable 执行 DROPCREATE 命令。您是否允许在该架构上执行这两个操作? 我对此模式具有读写权限。我尝试在 dbSendQuery 中使用 insert into、create、drop 命令,它运行良好。问题在于 dbWriteTable 函数。我已经尝试过 DBI 包的其他功能,如 dbReadTable、dbCreateTable 也可以正常工作。 Hadley Wickham 推荐 RPresto package: twitter.com/hadleywickham/status/1082422935154028544 【参考方案1】:

我猜问题是dbListTables()。错误可能来自这里:

https://github.com/s-u/RJDBC/blob/1a4fa8558bd20b5a6adbdd6588aa1f61bd51d7d7/R/class.R#L273 https://github.com/s-u/RJDBC/blob/1a4fa8558bd20b5a6adbdd6588aa1f61bd51d7d7/R/class.R#L183

这成功了吗?

dbListTables(conn, pattern = DBI::SQL("test.demo"))

如果没有,可能是您没有读取元数据的权限,或者您的 JDBC 驱动程序有问题。

(如果它有效,我也推荐 RPresto。但是,我知道并非总是如此......)

【讨论】:

以上是关于DBI 包中的 dbWriteTable 函数抛出错误的主要内容,如果未能解决你的问题,请参考以下文章

DBI::dbWriteTable,无效的多字节字符串

如何使用 DBI 写入带有日期列的表

错误:protect():使用 dbWriteTable (RSQLite) 写入文件时保护堆栈溢出

dbReadTable 将日期列从 SQL 数据库强制转换为字符

在 R DBI 中绑定变量

dbwritetable 删除 mysql 中的自动增量字段