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”的方法的主要内容,如果未能解决你的问题,请参考以下文章

dplyr 取消引用不适用于过滤器功能

TYPO3 图像处理也适用于 PDF 文件?

无法在 Mac 上找到适用于 android 的密钥库

是否有适用于 Amazon S3 的 Python3 兼容 Django 存储后端?

无法找到适用于操作系统的Tensorflow本机库

为啥切片函数在不明确使用 dplyr 的情况下不起作用