我有一个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
已经引用了追加的表datatable_1
和 SQLite 数据库中的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 语句。