我正在尝试使用 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)
})

关于r - 带有 JDBC 驱动程序的 "The requested fetchSize is more than the allowed value in Athena",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44379318/

10-10 04:48