使用 dplyr 绑定数据库中的行

Min*_*Mai 4 r amazon-redshift dplyr

我有两个大表,old_customers 和 new_customers,我想对它们进行行绑定。这已完成,但其中任何一个都太大而无法加载到内存中。但是,我不确定是否bind_rows允许绑定两个表而不是两个数据框。我尝试时收到此错误

old <- tbl(conn, 'old_customers')
new <- tbl(conn, 'new_customers')
old %>% bind_rows(new)
Error in bind_rows_(x, .id) : 
  Argument 1 must be a data frame or a named atomic vector, not a tbl_dbi/tbl_sql/tbl_lazy/tbl
Run Code Online (Sandbox Code Playgroud)

另一种选择是这样的

old <- as.data.frame(tbl(conn, 'old_customers'))
new <- as.data.frame(tbl(conn, 'new_customers'))
old %>% bind_rows(new)
Run Code Online (Sandbox Code Playgroud)

但同样,我试图避免将此数据集加载到内存中。有没有解决的办法?

bou*_*all 8

您可以使用该union_all函数,它的操作与rbindor非常相似bind_rows,但应该具有不需要在内存中加载数据的额外优势。

old <- tbl(conn, 'old_customers')
new <- tbl(conn, 'new_customers')
old %>% union_all(new)
Run Code Online (Sandbox Code Playgroud)