Как использовать символьный вектор в фильтре при подключении к базе данных в R?

РЕДАКТИРОВАТЬ: я нашел свою ошибку в примере ниже. Я сделал опечатку в 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. Как я могу предотвратить это?

На обычных data.frames в R это работает. Подобно:

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 ответов

Другие вопросы по тегам