"The requested fetchSize is more than the allowed value in Athena" 和 JDBC driver
"The requested fetchSize is more than the allowed value in Athena" with JDBC driver
我正在尝试使用 RJDBC
将数据从 Athena DB 提取到 R 中,如 AWS's own blog 中的详细描述。 las,我要提取的数据量很大,所以我收到以下错误消息:
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 包中修复了它,因此您可以根据需要使用它。
我正在尝试使用 RJDBC
将数据从 Athena DB 提取到 R 中,如 AWS's own blog 中的详细描述。 las,我要提取的数据量很大,所以我收到以下错误消息:
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 包中修复了它,因此您可以根据需要使用它。