我正在尝试使用RJDBC
将数据从Athena DB拉入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是否尊重这个限制?
基本问题是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)
})
为了它的价值,我在AWR.Athena
R包中修复了它,所以如果你愿意,你可以使用它。