用 dplyr 在数据库中写入 table
write table in database with dplyr
有没有办法让 dplyr 连接到数据库管道数据到新的 table within 该数据库, 从不在本地下载数据?
我想按照以下方式做一些事情:
tbl(con, "mytable") %>%
group_by(dt) %>%
tally() %>%
write_to(name = "mytable_2", schema = "transformed")
虽然我完全同意学习 SQL 的建议,但您可以利用 dplyr
不会在绝对必要时提取数据并使用 [= 构建查询这一事实=13=],添加 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')
有没有办法让 dplyr 连接到数据库管道数据到新的 table within 该数据库, 从不在本地下载数据?
我想按照以下方式做一些事情:
tbl(con, "mytable") %>%
group_by(dt) %>%
tally() %>%
write_to(name = "mytable_2", schema = "transformed")
虽然我完全同意学习 SQL 的建议,但您可以利用 dplyr
不会在绝对必要时提取数据并使用 [= 构建查询这一事实=13=],添加 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')