如何在R中的数据库连接上的过滤器中使用字符向量?

时间:2018-07-18 08:42:13

标签: r dplyr mariadb dbplyr

编辑:我在下面的示例中发现了我的错误。我在过滤器的stored_group中打了一个错字。它按预期工作。

我想使用一个字符值来过滤数据库表。我直接在连接对象上使用dplyr函数。请参阅下面的步骤。

我已连接到我的MariaDB数据库:

con <- dbConnect(RMariaDB::MariaDB(), 
                 dbname = mariadb.database,
                 user = mariadb.username,
                 password = mariadb.password,
                 host = mariadb.host,
                 port = mariadb.port)

然后,我想通过直接在上面的连接上使用dplyr代码对数据库中的表使用过滤器:

stored_group <- "some_group"
con %>% 
  tbl("Table") %>% 
  select(id, group) %>%
  filter(group == stored_group) %>%
  collect()

我遇到一个错误,说Unknown column 'stored_group' in 'where clause'。所以我这样使用show_query()

stored_group <- "some_group"
con %>% 
  tbl("Table") %>% 
  select(id, group) %>%
  filter(group == stored_group) %>%
  show_query()

然后我得到了

<SQL>
SELECT `id`, `group`
FROM `Table`
WHERE (`group` = `stored_group`)

在翻译中,stored_group被视为列名而不是R中的值。如何防止这种情况发生?

在R中的普通data.frames上有效。喜欢:

stored_group <- "some_group"
data %>% 
  select(id, group) %>%
  filter(group == stored_group)

我刚刚测试了以下解决方案,它可以工作。但是我的数据库表会增长。我想在收集之前直接在数据库上进行过滤。

stored_group <- "some_group"
con %>% 
  tbl("Table") %>% 
  select(id, group) %>%
  collect() %>%
  filter(group == stored_group)

有什么建议吗?

0 个答案:

没有答案