我在aws帐户X的EC2实例上有一个R脚本,该脚本试图连接到aws帐户Y上的Athena数据库。如果我要使用RJDBC包,则可以通过以下方式无缝连接:>
URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/JDBC/AthenaJDBC_1.1.0/AthenaJDBC41-1.1.0.jar'
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil)
drv <- JDBC(driverClass="com.amazonaws.athena.jdbc.AthenaDriver", fil, identifier.quote="'")
conn <- jdbcConnection <- dbConnect(drv, 'jdbc:awsathena://athena.us-west-2.amazonaws.com:xxx/',
s3_staging_dir="s3://xxx/",
user='xxx',
password='xxx')
这可行,但是我试图让Athena通过AWR.Athena包工作(大型查询没有基于行的限制)。它需要在我的ec2实例上安装aws cli,我已经使用aws configure进行了设置。
在R中,我已经验证了凭据是否可以通过:
install.packages('aws.signature')
library(aws.signature)
aws.signature::locate_credentials()
但是,每次我尝试使用以下方法连接到Athena时,都会出现错误:
library(rJava)
.jcall("java/lang/System", "S", "setProperty", "aws.profile", "xxx")
library(AWR.Athena)
require(DBI)
dbConnect(AWR.Athena::Athena(),
region='us-west-2',
S3OutputLocation='xxx',
Schema='default')
Error in .jcall(drv@jdrv, "Ljava/sql/Connection;", "connect", as.character(url)[1], :
java.sql.SQLException: [Simba][AthenaJDBC](100131) An error has been thrown from the AWS SDK client. Unable to load AWS credentials from any provider in the chain: [EnvironmentVariableCredentialsProvider: Unable to load AWS credentials from environment variables (AWS_ACCESS_KEY_ID (or AWS_ACCESS_KEY) and AWS_SECRET_KEY (or AWS_SECRET_ACCESS_KEY)), SystemPropertiesCredentialsProvider: Unable to load AWS credentials from Java system properties (aws.accessKeyId and aws.secretKey), com.simba.athena.amazonaws.auth.profile.ProfileCredentialsProvider@xxx: No AWS profile named 'xxx', com.simba.athena.amazonaws.auth.EC2ContainerCredentialsProviderWrapper@aeab9a1: The requested metadata is not found at http://xxx/latest/meta-data/iam/security-credentials/] [Execution ID not available]```
答案 0 :(得分:1)
我...已修复。我不知道为什么这行得通,但是我将这一行更改为默认值,并且行得通。
.jcall("java/lang/System", "S", "setProperty", "aws.profile", "default")