2017-11-06 3 views
1

AthenaをRに接続し、そこからデータを取得しようとしています。ここ は、私がやった別の手順は次のとおりです。RJDBCはAthenaでテーブル名を返しますが、内容は返しません

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) 

何か助けていただければ幸いです。ありがとうございました!

+0

https://github.com/hrbrmstr/metisまたはhttps://cran.r-project.org/web/packages/AWR.Athena/ – hrbrmstr

答えて

0

これは興味深い問題のようです。

クイック質問:

あなたは、結果セットの場所が配置されている同じ領域に接続していませんか? s3://my-s3eu-west-2にありますか?

ハッキングを行っていて、次のコードでエラーを再現できました。バケットはus-west-2ですが、アテーナのエンドポイントはus-east-1です。新しいRセッションから

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) 

、私はその後us-east-1を通じてアテナに再接続し、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 
0

ありがとうございました!だから、PythonとJavaで同じコードを試した結果、問題はドライバに関連していることがわかりました。私が使っていたものは明らかに時代遅れだった。私は最後のドライバをインストールし、Rstudioを再起動しましたが、今は完璧に動作します!ありがとう!

関連する問題