我正试图使用RJDBC
将数据从Athena数据库提取到R,详见AWS's own blog。唉,我试图提取的数据量很大,因此我收到以下错误消息:
Error in .jcall(rp, "I", "fetch", stride, block) :
java.sql.SQLException: The requested fetchSize is more than the allowed value in Athena. Please reduce the fetchSize and try again. Refer to the Athena documentation for valid fetchSize values.
Athena文档实际上并未提供任何此类fetchSize
值,但我从this github issue收集该值应低于1000.我从同一个github问题收集到没有将此fetchSize
传递给RJDBC的方法。那么有其他方法可以查询Athena是否尊重这个限制?
答案 0 :(得分:5)
基本问题是dbGetQuery
不允许指定fetchSize
。由于per the RJDBC
package author一种解决方法是调用dbGetQuery
单独包装的两个函数,并将fetchSize
传递给fetch()
:
q <- dbSendQuery(c, ...)
fetch(q, -1, block=999)
更一般地说:
setMethod("dbGetQuery", signature(conn="JDBCConnection", statement="character"), def=function(conn, statement, ...) {
r <- dbSendQuery(conn, statement, ...)
on.exit(.jcall(r@stat, "V", "close"))
if (conn@jc %instanceof% "com.amazonaws.athena.jdbc.AthenaConnection") fetch(r, -1, 999) # Athena can only pull 999 rows at a time
else fetch(r, -1)
})
答案 1 :(得分:2)
对于它的价值,我在AWR.Athena
R包中修复了它,所以如果你愿意,你可以使用它。