"请求的fetchSize超过了Athena"中允许的值。使用JDBC驱动程序

时间:2017-06-05 23:45:25

标签: r amazon-web-services jdbc amazon-athena

我正试图使用​​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是否尊重这个限制?

2 个答案:

答案 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包中修复了它,所以如果你愿意,你可以使用它。