“使用JDBC驱动程序,请求的fetchSize超过了Athena中允许的值”

问题描述 投票:4回答:2

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

r amazon-web-services jdbc amazon-athena
2个回答
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)
})

2
投票

为了它的价值,我在AWR.Athena R包中修复了它,所以如果你愿意,你可以使用它。

© www.soinside.com 2019 - 2024. All rights reserved.