PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Tabelle in Datenbank schreiben mit dplyr

Während ich dem Vorschlag, SQL zu lernen, von ganzem Herzen zustimme, können Sie die Tatsache nutzen, dass dplyr zieht keine Daten, bis es unbedingt erforderlich ist, und erstellt die Abfrage mit dplyr , fügen Sie TO TABLE hinzu -Klausel und führen Sie dann die SQL-Anweisung mit dplyr::do() aus , wie in:

# 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"))

Sie könnten sogar eine kleine Funktion schreiben, die dies tut:

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

und leiten Sie die Abfrage wie folgt an diese Funktion weiter:

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')