Использование dplyr для связывания строк внутри базы данных - PullRequest
0 голосов
/ 15 мая 2018

У меня есть две большие таблицы, 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

Другой вариант будет выглядеть примерно так:

old <- as.data.frame(tbl(conn, 'old_customers'))
new <- as.data.frame(tbl(conn, 'new_customers'))
old %>% bind_rows(new)

Но, опять же, я пытаюсь избежать загрузки этого набора данных в память.Есть ли способ обойти это?

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать функцию union_all, которая работает очень похоже на rbind или bind_rows, но должна иметь дополнительное преимущество: нет необходимости загружать данные в память.

old <- tbl(conn, 'old_customers')
new <- tbl(conn, 'new_customers')
old %>% union_all(new)
...