Dplyr 后端无法为 'sql_translate_env' 找到适用的方法

Dplyr backend is not able to find applicable method for 'sql_translate_env'

我尝试在 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())

Source: query [?? x 7] Database: MonetDB 11.25.5 (Dec2016-SP1)

Error in UseMethod("sql_translate_env") : no applicable method for 'sql_translate_env' applied to an object of class "MonetDBConnection"

我在 docker 容器 (rocker/verse:3.3.2) 中使用默认的 repository/settings (packages.install("dplyr")) 安装了 dplyr。

更新 1:MonetDBLite 而不是 od 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())

Source: query [?? x 7] Database: MonetDB 11.25.5 (Dec2016-SP1)

Error in .mapiRead(conObj@connenv$socket) : Empty response from MonetDB server, probably a timeout. You can increase the time to wait for responses with the 'timeout' parameter to 'dbConnect()'.

数据集真的很小(只有 5000 个条目)所以这应该不是什么大问题。 MonetDB 安装在同一台服务器上并且运行良好,DBI 界面也可以运行(并且 returns 一秒钟内得到结果):

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())

Source: query [?? x 7] Database: MonetDB 11.25.5 (Dec2016-SP1)

Error in .mapiRead(conObj@connenv$socket) : Empty response from MonetDB server, probably a timeout. You can increase the time to wait for responses with the 'timeout' parameter to 'dbConnect()'.

devtools::install_github( "hannesmuehleisen/MonetDBLite" )
db <- MonetDBLite::src_monetdb("ai_db", user="analyst", password="mypassword", host="monetdb.local")
db %>% tbl("users") %>% mutate(n= n())

Source: query [?? x 7] Error in inherits(con_acquire(x), "MonetDBEmbeddedConnection") : could not find function "con_acquire"

请改用 MonetDBLite 包,它也包含连接到独立服务器的代码