2016-05-09 14 views
0

Ich habe eine Tabelle in AWS redshift gespeichert, die viele Zeilen hat und ich möchte nur eine Teilmenge von ihnen mit einer Spalte "user_id" sammeln. Ich versuche, R mit der dplyr-Bibliothek zu verwenden, um dies zu erreichen (siehe unten).Filtertabelle von redshift Datenbank mit R dplyr

conn_dplyr <- src_postgres('dev', 
         host = '****', 
         port = ****, 
         user = "****", 
         password = "****") 
df <- tbl(conn_dplyr, "redshift_table") 

Wenn ich jedoch versuche, über eine Sammlung von Benutzer-IDs zu subsettieren, schlägt es fehl (siehe unten). Kann mir jemand helfen zu verstehen, wie ich die Datentabelle über eine Sammlung von Benutzer-ID-Elementen sammeln kann? Die einzelnen Anrufe funktionieren, aber wenn ich sie kombiniere, schlägt beides fehl. In diesem Fall gibt es nur 2 Benutzer-IDs, aber im Allgemeinen können es Hunderte oder Tausende sein, also möchte ich nicht jeden einzeln machen. Danke für Ihre Hilfe.

df_subset1 <- filter(df, user_id=="2239257806") 
df_subset1 <- collect(df_subset1) 

df_subset2 <- filter(df, user_id=="22159960") 
df_subset2 <- collect(df_subset2) 

df_subset_both <- filter(df, user_id==c("2239257806", "22159960")) 
df_subset_both <- collect(df_subset_both) 

Error in postgresqlExecStatement(conn, statement, ...) : 
RS-DBI driver: (could not Retrieve the result : ERROR: operator does not  exist: character varying = record 
HINT: No operator matches the given name and argument type(s). You may need to add explicit type casts. 
) 

Antwort

2

Try this:

df_subset_both <- filter(df, user_id %in% c("2239257806", "22159960")) 
0

Auch Sie Bedingung in der Abfrage, die Sie aus der Rotverschiebung hochgeladen hinzufügen können.

install.packages("RPostgreSQL") 
    library(RPostgreSQL) 
    drv <- dbDriver("PostgreSQL") 
    conn <-dbConnect(drv,host='host link',port='5439',dbname='dbname',user='xxx',password='yyy') 
    df_subset_both <- dbSendQuery(conn,"select * from my_table where user_id in (2239257806,22159960)")