我有一个 SQLite 数据库,其中有几个包含相同变量的大表。通常我会建立连接并进行查询(使用 dbplyr),如下所示:
database <- dbConnect(RSQLite::SQLite(), "/database.sqlite")
table_1 <- tbl(database, "datatable_1")
table_2 <- tbl(database, "datatable_2")
table_1_final <- table_1 %>% filter(id < 1000) %<% collect()
table_2_final <- table_2 %>% filter(id < 1000) %<% collect()
而不是做
table_final <- bind_rows(table_1_final, table_2_final)
我想在第一步中附加两个表,以便我可以进行这样的查询
table_final <- table %>% filter(id < 1000) %>% collect()
其中 table
已引用 SQLite 数据库中的附加表 datatable_1
和 datatable_2
。
但是我不想在数据库中永久创建附加表,也不想将它们加载到内存中(太大)。
(如何)我可以实现这一目标?
最佳答案
您可以使用union_all
来实现:
示例代码:
library(dplyr, warn.conflicts = FALSE)
data("mtcars")
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
copy_to(con, mtcars[1,], "mtcars1")
copy_to(con, mtcars[2,], "mtcars2")
mtcars1 <- tbl(con, "mtcars1")
mtcars2 <- tbl(con, "mtcars2")
mt_combined <- union_all(mtcars1,mtcars2)
mt_combined <- collect(mt_combined)
如果两个表都来自同一个 Databes 连接,这将执行 UNION
SQL 语句。
关于r - 在使用 R 查询之前从 SQLite 数据库附加两个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71526532/