r - 使用 dplyr 在数据库中写入表

标签 r postgresql dplyr

有没有办法让 dplyr 连接到数据库管道数据到该数据库的新表,而不是在本地下载数据?

我想按照以下方式做一些事情:

tbl(con, "mytable") %>%
   group_by(dt) %>%
   tally() %>%
   write_to(name = "mytable_2", schema = "transformed")

最佳答案

虽然我完全同意学习 SQL 的建议,但您可以利用 dplyr 在绝对必要时才拉取数据这一事实,并使用 dplyr 构建查询,添加 TO TABLE 子句,然后使用 dplyr::do() 运行 SQL 语句,如:

# CREATE A DATABASE WITH A 'FLIGHTS' TABLE
library(RSQLite)
library(dplyr)
library(nycflights13)
my_db <- src_sqlite("~/my_db.sqlite3", create = T)
flights_sqlite <- copy_to(my_db, flights, temporary = FALSE, indexes = list(
  c("year", "month", "day"), "carrier", "tailnum"))

# BUILD A QUERY
QUERY = filter(flights_sqlite, year == 2013, month == 1, day == 1) %>%
    select( year, month, day, carrier, dep_delay, air_time, distance) %>%
    mutate( speed = distance / air_time * 60) %>%
    arrange( year, month, day, carrier)

# ADD THE "TO TABLE" CLAUSE AND EXECUTE THE QUERY 
do(paste(unclass(QUERY$query$sql), "TO TABLE foo"))

您甚至可以编写一个小函数来执行此操作:

to_table  <- function(qry,tbl)
    dplyr::do(paste(unclass(qry$query$sql), "TO TABLE",tbl))

并将查询通过管道传递给该函数,如下所示:

filter(flights_sqlite, year == 2013, month == 1, day == 1) %>%
    select( year, month, day, carrier, dep_delay, air_time, distance) %>%
    mutate( speed = distance / air_time * 60) %>%
    arrange( year, month, day, carrier) %>%
    to_table('foo')

关于r - 使用 dplyr 在数据库中写入表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29878227/

相关文章:

postgresql - 如何禁用 postgresql "Cache"优化?

r - 使用 purrr 映射按列对迭代汇总

返回一组列中的第二大值

r - 在 dplyr 中添加新的分组变量

r - 一天中给定时间、纬度和经度的太阳位置

python - 使用 SQLAlchemy 批量更新

sql - 参数化表名

r - R中列表形式的向量元素的成对组合

r - 如何将 lm 对象存储在 R 的数据框中

r - dplyr 单独返回错误