【问题标题】:RJDBC returning table names but not the content with AthenaRJDBC 返回表名而不是 Athena 的内容
【发布时间】:2017-11-06 17:08:41
【问题描述】:

我正在尝试将 Athena 连接到 R 并从中获取数据。 以下是我执行的不同步骤:

  library(rJava)

    URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/AthenaJDBC41-1.0.1.jar'    


    fil <- basename(URL)


    if (!file.exists(fil)) download.file(URL, fil,mode = "wb")  


    library(dplyr)  

    library(RJDBC)  

    drv <- JDBC(driverClass="com.amazonaws.athena.jdbc.AthenaDriver",  
 fil, identifier.quote="'")     

    con <-  dbConnect(drv, 'jdbc:awsathena://athena.eu-west-2.amazonaws.com:443/',                                     s3_staging_dir="s3://my-s3",user="ACCESS_KEY",password="SECRET_KEY")



    dbListTables(con). 



    dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")

dbListTables(con) 为我提供所需的输出(表的名称):

[1] "elb_logs" 

但是 dbGetQuery(con, "SELECT * FROM sampledb.elb_logs") 给出错误:

    Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
      Unable to retrieve JDBC result set for SELECT * FROM sampledb.elb_logs (Failed to  
 run query)

任何帮助将不胜感激。谢谢!

【问题讨论】:

标签: r amazon-s3 amazon-athena


【解决方案1】:

这听起来是个有趣的问题。

快速提问:

您是否连接到您的结果集位置所在的同一区域? s3://my-s3eu-west-2 中吗?

我正在做一些黑客攻击,并且能够使用以下代码重现您的错误,其中我的存储桶位于 us-west-2,但我在 us-east-1 中指定了 Athena 端点。

library(rJava)
library(RJDBC)

driver_path <- '/drivers/jdbc/athena/1.1.0/AthenaJDBC41-1.1.0.jar'
driver <- JDBC(driverClass="com.amazonaws.athena.jdbc.AthenaDriver", driver_path, identifier.quote="'")

con <- jdbcConnection <- dbConnect(driver, 'jdbc:awsathena://athena.us-east-1.amazonaws.com:443/',
                               s3_staging_dir="s3://***-west",
                               user = '**********',
                               password = '**********')
# Connect to Athena specifying us-east-1 and a staging directory in us-west-2

dbListTables(con)

# Gives me the tables in my Athena catalog

dbGetQuery(con, "SELECT now()")

# Throws the following error
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ",  : 
Unable to retrieve JDBC result set for SELECT now() (Failed to run query)

从一个新的 R 会话,然后我通过 us-east-1 重新连接到 Athena,并指定一个存储桶来保存托管在 us-east-1 中的输出。

library(rJava)
library(RJDBC)

driver_path <- '/drivers/jdbc/athena/1.1.0/AthenaJDBC41-1.1.0.jar'
driver <- JDBC(driverClass="com.amazonaws.athena.jdbc.AthenaDriver", driver_path, identifier.quote="'")

con <- jdbcConnection <- dbConnect(driver, 'jdbc:awsathena://athena.us-east-1.amazonaws.com:443/',
                               s3_staging_dir="s3://***-east",
                               user = '**********',
                               password = '**********')

dbListTables(con)

# Lists the tables in my Athena catalog

dbGetQuery(con, "SELECT now()")

# Returns
# _col0
# 2017-11-08 21:16:26.496 UTC

【讨论】:

    【解决方案2】:

    感谢您的回答!因此,在 Python 和 Java 上尝试了相同的代码后,我发现问题与驱动程序有关。我使用的那个显然已经过时了。我安装了最后一个驱动程序,重新启动了 Rstudio,现在可以正常工作了!谢谢 !

    【讨论】:

      猜你喜欢
      • 2011-08-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多