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
执行 DROP
和 CREATE
命令。您是否允许在该架构上执行这两个操作?
我对此模式具有读写权限。我尝试在 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 函数抛出错误的主要内容,如果未能解决你的问题,请参考以下文章
错误:protect():使用 dbWriteTable (RSQLite) 写入文件时保护堆栈溢出