使用R dplyr从redshift数据库中过滤表

时间:2016-05-09 20:08:40

标签: r postgresql dplyr amazon-redshift r-dbi

我有一个保存在AWS redshift中的表,它有很多行,我想只使用" user_id"来收集它们的一部分。柱。我正在尝试使用R和dplyr库来完成此任务(见下文)。

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

但是,当我尝试对用户ID的集合进行子集时,它会失败(见下文)。有人可以帮助我理解我如何能够通过一组用户id元素收集数据表吗?个人呼叫工作,但当我将它们组合时,它都失败了。在这种情况下,只有2个用户ID,但一般来说可能是数百或数千,所以我不想单独做每一个。谢谢你的帮助。

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

2 个答案:

答案 0 :(得分:2)

试试这个:

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

答案 1 :(得分:0)

您还可以在从redshift上传的查询中添加条件。

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