在 redshift 上愉快地使用 dbplyr 来做基本的事情后,我发现很难执行更复杂的分析,我想知道这是由于当前的 dbplyr 工具集,还是我的错误。
典型的 mwe:
library(dplyr)
library(dbplyr)
library(forcats)
redshift <- dbConnect(driver, url) # <<<obviously put in specific details here
tbl(redshift, "table") -> mytable
myTable %>% colnames() # This returns the correct colnames, great, working connection!
myTable %>% mutate_all(as_factor) # This gives an error
这种情况下的错误是 dbplyr 已将 sql 发送到数据库,如下所示:
SELECT AS_FACTOR("col_1") AS "col_1", AS_FACTOR("col_2") AS "col_2"
所以返回的错误是:
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", :
Unable to retrieve JDBC result set for SELECT AS_FACTOR("col_1") AS "col_1", AS_FACTOR("col_2") AS "col_2"....
但是,据我所知,Redshift 没有任何AS_FACTOR()
功能。在这种情况下,我会期望将数据拉入我的本地会话的行为,并将其作为 R 中的一个因素进行处理,但是它似乎没有记录 a) Redshift 没有该功能,b) Redshift 没有t 支持该数据类型(我相信,尽管愿意更正),c)其目的是提取数据并创建因子。
这似乎得到了文件here的支持,它将 Redshift 撞到了 postgres 环境中,尽管 Redshift 在范围上比 postgres 受限得多。
我的具体问题是:
- 我的推论过程对错误是否正确?
- 解决方法是什么,是在此阶段之前收集我的结果的过程,然后在本地工作,还是我错过了什么?