Dplyr 后端无法找到适用于“sql_translate_env”的方法
Posted
技术标签:
【中文标题】Dplyr 后端无法找到适用于“sql_translate_env”的方法【英文标题】:Dplyr backend is not able to find applicable method for 'sql_translate_env' 【发布时间】:2017-03-03 09:53:16 【问题描述】:我尝试在 monetdb SQL 后端运行一个简单的 dplyr 命令。连接本身似乎有效,但 dplyr 调用失败。我重新启动了RSession并尝试再次重新安装MonetDB.R
包,但没有成功。
library(dplyr)
db <- MonetDB.R::src_monetdb("ai_db", user="analyst", host="monetdb.local", password="mypassword")
## works!
DBI::dbGetQuery(db$con, "SELECT count(*) from users")
## fails
db %>% tbl("users") %>% mutate(n= n())
来源:查询 [?? x 7] 数据库:MonetDB 11.25.5 (Dec2016-SP1)
UseMethod("sql_translate_env") 中的错误:没有适用的方法 'sql_translate_env' 应用于“MonetDBConnection”类的对象
我使用 docker 容器 (rocker/verse:3.3.2) 中的默认存储库/设置 (packages.install("dplyr")
) 安装了 dplyr。
更新 1:MonetDBLite 改为 MonetDB.R
现在我安装了 MonetDBLite 并使用以下代码创建连接:
con <- mc(dbname="ai_db", user="analyst", password="mypassword", host="monetdb.local",
timeout=86400000)
db <- MonetDBLite::src_monetdb("ai_db",con=con)
我设置了一个相当高的超时,因为错误消息指示一个低(见下文)。但是,命令再次失败,我认为它与超时无关,因为它立即失败。
## fails
db %>% tbl("users") %>% mutate(n= n())
来源:查询 [?? x 7] 数据库:MonetDB 11.25.5 (Dec2016-SP1)
.mapiRead(conObj@connenv$socket) 中的错误:来自的空响应 MonetDB 服务器,可能是超时。您可以增加等待时间 用于对 'dbConnect()' 的带有 'timeout' 参数的响应。
数据集非常小(只有 5000 个条目),所以这应该没什么大不了的。 MonetDB 安装在同一台服务器上并且运行良好,DBI 接口也可以正常工作(并在一秒钟内返回结果):
DBI::dbGetQuery(con, "SELECT count(*) from videos")
更新 2:
现在我尝试了 MonetdbLite 的开发版本和存储库中的稳定 CRAN 版本。两者都失败了,但有不同的错误。
packages.install("MonetDBLite")
db <- MonetDBLite::src_monetdb("ai_db", user="analyst", password="mypassword", host="monetdb.local")
db %>% tbl("users") %>% mutate(n= n())
来源:查询 [?? x 7] 数据库:MonetDB 11.25.5 (Dec2016-SP1)
.mapiRead(conObj@connenv$socket) 中的错误:来自的空响应 MonetDB 服务器,可能是超时。您可以增加等待时间 用于对 'dbConnect()' 的带有 'timeout' 参数的响应。
devtools::install_github( "hannesmuehleisen/MonetDBLite" )
db <- MonetDBLite::src_monetdb("ai_db", user="analyst", password="mypassword", host="monetdb.local")
db %>% tbl("users") %>% mutate(n= n())
来源:查询 [?? x 7] 继承错误(con_acquire(x), “MonetDBEmbeddedConnection”):找不到函数 “con_acquire”
【问题讨论】:
嗨,语法正确吗? cran.rstudio.com/web/packages/dplyr/vignettes/databases.html 通过测试用例:github.com/hannesmuehleisen/MonetDBLite/blob/master/tests/… 你可能需要devtools::install_github( "hannesmuehleisen/MonetDBLite" )
不确定
@AnthonyDamico 我先尝试了src_monetdb("ai_db", user="analyst", password="mypassword", host="monetdb.local")
,但后来我不得不重写它来设置超时(我总是遇到这个烦人的超时错误)。我将尝试在接下来的几天内安装开发版本,但我希望我能获得稳定的 CRAN 版本(我使用的是预构建的 docker 映像,我更喜欢不需要安装所有 monetdb 的解决方案依赖项(例如,libmonetdb5.so
))。
@AnthonyDamico 好的,这不是依赖问题,我只需要正确设置权限,然后我就可以使用 devtools 安装包。最新版本也失败了,但出现了不同的错误(我已经更新了我的帖子)。
您是指ajdamico/lodown
库吗?这应该修复缺少的con_acquire
函数还是 CRAN monetDBLite 版本?我安装了它并再次尝试安装 MonetdbLite devtools,但我仍然收到相同的错误 (could not find function "con_acquire"
)
【参考方案1】:
请改用 MonetDBLite 包,它也包含连接独立服务器的代码
【讨论】:
以上是关于Dplyr 后端无法找到适用于“sql_translate_env”的方法的主要内容,如果未能解决你的问题,请参考以下文章