1

編集:以下の例でエラーを見つけました。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)

助言がありますか?

4

0 に答える 0