从 AWS Athena 查询数据后 R 会话中止 Table
R Session aborted after querying data from an AWS Athena Table
我正在尝试从 AWS Athena elb_logs
中的演示 table 查询数据。
与数据库的连接成功,但是,如果尝试使用 dbReadTable
或 dbGetQuery
查询数据,R 会话将中止。
library(DBI)
con <- dbConnect(
odbc::odbc(),
Driver = "/Library/simba/athenaodbc/lib/libathenaodbc_sbu.dylib",
S3OutputLocation = "s3://aws-athena-query-results-eu-central-1/",
AwsRegion = "eu-central-1",
AuthenticationType = "IAM Credentials",
UID = Sys.getenv("AWS_ACCESS_KEY_ID"),
PWD = Sys.getenv("AWS_SECRET_ACCESS_KEY")
)
dbListObjects(con)
dbReadTable(con, name = "elb_logs")
dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")
由 reprex package (v0.3.0)
于 2019-11-10 创建
devtools::session_info()
#> ─ Session info ──────────────────────────────────────────────────────────
#> setting value
#> version R version 3.6.1 (2019-07-05)
#> os macOS Mojave 10.14.6
#> system x86_64, darwin15.6.0
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Europe/Berlin
#> date 2019-11-10
#>
#> ─ Packages ──────────────────────────────────────────────────────────────
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.0)
#> backports 1.1.5 2019-10-02 [1] CRAN (R 3.6.0)
#> bit 1.1-14 2018-05-29 [1] CRAN (R 3.6.0)
#> bit64 0.9-7 2017-05-08 [1] CRAN (R 3.6.0)
#> blob 1.2.0 2019-07-09 [1] CRAN (R 3.6.0)
#> callr 3.3.2 2019-09-22 [1] CRAN (R 3.6.0)
#> cli 1.1.0 2019-03-19 [1] CRAN (R 3.6.0)
#> crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.0)
#> DBI * 1.0.0 2018-05-02 [1] CRAN (R 3.6.0)
#> desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.0)
#> devtools 2.2.1 2019-09-24 [1] CRAN (R 3.6.0)
#> digest 0.6.22 2019-10-21 [1] CRAN (R 3.6.1)
#> ellipsis 0.3.0 2019-09-20 [1] CRAN (R 3.6.0)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.0)
#> fs 1.3.1 2019-05-06 [1] CRAN (R 3.6.0)
#> glue 1.3.1 2019-03-12 [1] CRAN (R 3.6.0)
#> highr 0.8 2019-03-20 [1] CRAN (R 3.6.0)
#> hms 0.5.2 2019-10-30 [1] CRAN (R 3.6.1)
#> htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.0)
#> knitr 1.25 2019-09-18 [1] CRAN (R 3.6.0)
#> magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.0)
#> memoise 1.1.0 2017-04-21 [1] CRAN (R 3.6.0)
#> odbc 1.1.6 2018-06-09 [1] CRAN (R 3.6.0)
#> pillar 1.4.2 2019-06-29 [1] CRAN (R 3.6.0)
#> pkgbuild 1.0.6 2019-10-09 [1] CRAN (R 3.6.0)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.0)
#> pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.6.0)
#> prettyunits 1.0.2 2015-07-13 [1] CRAN (R 3.6.0)
#> processx 3.4.1 2019-07-18 [1] CRAN (R 3.6.0)
#> ps 1.3.0 2018-12-21 [1] CRAN (R 3.6.0)
#> R6 2.4.0 2019-02-14 [1] CRAN (R 3.6.0)
#> Rcpp 1.0.3 2019-11-08 [1] CRAN (R 3.6.1)
#> remotes 2.1.0 2019-06-24 [1] CRAN (R 3.6.0)
#> rlang 0.4.1 2019-10-24 [1] CRAN (R 3.6.1)
#> rmarkdown 1.16 2019-10-01 [1] CRAN (R 3.6.0)
#> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.0)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.0)
#> stringi 1.4.3 2019-03-12 [1] CRAN (R 3.6.0)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.0)
#> testthat 2.2.1 2019-07-25 [1] CRAN (R 3.6.0)
#> tibble 2.1.3 2019-06-06 [1] CRAN (R 3.6.0)
#> usethis 1.5.1 2019-07-04 [1] CRAN (R 3.6.0)
#> vctrs 0.2.0 2019-07-05 [1] CRAN (R 3.6.0)
#> withr 2.1.2 2018-03-15 [1] CRAN (R 3.6.0)
#> xfun 0.10 2019-10-01 [1] CRAN (R 3.6.0)
#> yaml 2.2.0 2018-07-25 [1] CRAN (R 3.6.0)
#> zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.6.0)
#>
#> [1] /Library/Frameworks/R.framework/Versions/3.6/Resources/library
这是我在 运行 直接在 R
中得到的错误
*** caught segfault ***
address 0x21, cause 'memory not mapped'
Traceback:
1: new_result(connection@ptr, statement)
2: OdbcResult(connection = conn, statement = statement)
3: dbSendQuery(conn, statement, ...)
4: dbSendQuery(conn, statement, ...)
5: .local(conn, statement, ...)
6: dbGetQuery(con, "SELECT elb_name FROM sampledb.elb_logs LIMIT 10")
7: dbGetQuery(con, "SELECT elb_name FROM sampledb.elb_logs LIMIT 10")
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
更新
我尝试了另一种方法,得到了一条不同的错误消息,这似乎与 Athena 设置更相关。如果有人已经连接到该数据库,我将不胜感激。
library(rJava)
library(RJDBC)
#> Loading required package: DBI
URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/JDBC/SimbaAthenaJDBC_2.0.9/AthenaJDBC42_2.0.9.jar'
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil, mode="wb")
drv <- JDBC(driverClass="com.simba.athena.jdbc.Driver", classPath = fil, identifier.quote="'")
con <- jdbcConnection <- dbConnect(drv, 'jdbc:awsathena://athena.us-west-2.amazonaws.com:443/',
S3OutputLocation="s3://aws-bmw-athena-results/",
user=Sys.getenv("AWS_ACCESS_KEY_ID"),
password=Sys.getenv("AWS_SECRET_ACCESS_KEY"),
)
dfdhis2=dbGetQuery(con, "SELECT elb_name FROM sampledb.elb_logs LIMIT 10")
#> Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", : Unable to retrieve JDBC result set for SELECT elb_name FROM sampledb.elb_logs LIMIT 10 ([Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. No output location provided. An output location is required either through the Workgroup result configuration setting or as an API input. [Execution ID not available])
由 reprex package (v0.3.0)
于 2019-11-11 创建
好的,我将关闭此答案,因为我发现会话因 R 环境问题而中止。
替代连接方法
如果您想尝试另一种方法从 R 连接到 AWS Athena,您可以尝试这两个新包:noctua and RAthena。他们分别使用 AWS SDK paws
和 boto3
连接到 Athena。
正在连接到 Athena
RAthena(boto3连接方式)
因为你在环境变量中设置了 "AWS_ACCESS_KEY_ID" 和 "AWS_SECRET_ACCESS_KEY" RAthena 会为你挑选它们。
library(DBI)
con <- dbConnect(
RAthena::athena(),
s3_staging_dir = "s3://aws-athena-query-results-eu-central-1/",
region_name = "eu-central-1")
它现在将使用类似于 odbc 和 RJDBC 的 DBI 接口查询 AWS Athena。
dbListObjects(con)
dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")
noctua(爪子连接法)
与RAthena
非常相似,noctua
会选择AWS环境变量。
library(DBI)
con <- dbConnect(
noctua::athena(),
s3_staging_dir = "s3://aws-athena-query-results-eu-central-1/",
region_name = "eu-central-1")
它现在将使用类似于 odbc 和 RJDBC 的 DBI 接口查询 AWS Athena。
dbListObjects(con)
dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")
总结
我希望这能为您从 R 连接到 AWS Athena 时提供另一种选择。如果您想检查这些包,请访问包文档:noctua documentation and RAthena documentation
我正在尝试从 AWS Athena elb_logs
中的演示 table 查询数据。
与数据库的连接成功,但是,如果尝试使用 dbReadTable
或 dbGetQuery
查询数据,R 会话将中止。
library(DBI)
con <- dbConnect(
odbc::odbc(),
Driver = "/Library/simba/athenaodbc/lib/libathenaodbc_sbu.dylib",
S3OutputLocation = "s3://aws-athena-query-results-eu-central-1/",
AwsRegion = "eu-central-1",
AuthenticationType = "IAM Credentials",
UID = Sys.getenv("AWS_ACCESS_KEY_ID"),
PWD = Sys.getenv("AWS_SECRET_ACCESS_KEY")
)
dbListObjects(con)
dbReadTable(con, name = "elb_logs")
dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")
由 reprex package (v0.3.0)
于 2019-11-10 创建devtools::session_info()
#> ─ Session info ──────────────────────────────────────────────────────────
#> setting value
#> version R version 3.6.1 (2019-07-05)
#> os macOS Mojave 10.14.6
#> system x86_64, darwin15.6.0
#> ui X11
#> language (EN)
#> collate en_US.UTF-8
#> ctype en_US.UTF-8
#> tz Europe/Berlin
#> date 2019-11-10
#>
#> ─ Packages ──────────────────────────────────────────────────────────────
#> package * version date lib source
#> assertthat 0.2.1 2019-03-21 [1] CRAN (R 3.6.0)
#> backports 1.1.5 2019-10-02 [1] CRAN (R 3.6.0)
#> bit 1.1-14 2018-05-29 [1] CRAN (R 3.6.0)
#> bit64 0.9-7 2017-05-08 [1] CRAN (R 3.6.0)
#> blob 1.2.0 2019-07-09 [1] CRAN (R 3.6.0)
#> callr 3.3.2 2019-09-22 [1] CRAN (R 3.6.0)
#> cli 1.1.0 2019-03-19 [1] CRAN (R 3.6.0)
#> crayon 1.3.4 2017-09-16 [1] CRAN (R 3.6.0)
#> DBI * 1.0.0 2018-05-02 [1] CRAN (R 3.6.0)
#> desc 1.2.0 2018-05-01 [1] CRAN (R 3.6.0)
#> devtools 2.2.1 2019-09-24 [1] CRAN (R 3.6.0)
#> digest 0.6.22 2019-10-21 [1] CRAN (R 3.6.1)
#> ellipsis 0.3.0 2019-09-20 [1] CRAN (R 3.6.0)
#> evaluate 0.14 2019-05-28 [1] CRAN (R 3.6.0)
#> fs 1.3.1 2019-05-06 [1] CRAN (R 3.6.0)
#> glue 1.3.1 2019-03-12 [1] CRAN (R 3.6.0)
#> highr 0.8 2019-03-20 [1] CRAN (R 3.6.0)
#> hms 0.5.2 2019-10-30 [1] CRAN (R 3.6.1)
#> htmltools 0.4.0 2019-10-04 [1] CRAN (R 3.6.0)
#> knitr 1.25 2019-09-18 [1] CRAN (R 3.6.0)
#> magrittr 1.5 2014-11-22 [1] CRAN (R 3.6.0)
#> memoise 1.1.0 2017-04-21 [1] CRAN (R 3.6.0)
#> odbc 1.1.6 2018-06-09 [1] CRAN (R 3.6.0)
#> pillar 1.4.2 2019-06-29 [1] CRAN (R 3.6.0)
#> pkgbuild 1.0.6 2019-10-09 [1] CRAN (R 3.6.0)
#> pkgconfig 2.0.3 2019-09-22 [1] CRAN (R 3.6.0)
#> pkgload 1.0.2 2018-10-29 [1] CRAN (R 3.6.0)
#> prettyunits 1.0.2 2015-07-13 [1] CRAN (R 3.6.0)
#> processx 3.4.1 2019-07-18 [1] CRAN (R 3.6.0)
#> ps 1.3.0 2018-12-21 [1] CRAN (R 3.6.0)
#> R6 2.4.0 2019-02-14 [1] CRAN (R 3.6.0)
#> Rcpp 1.0.3 2019-11-08 [1] CRAN (R 3.6.1)
#> remotes 2.1.0 2019-06-24 [1] CRAN (R 3.6.0)
#> rlang 0.4.1 2019-10-24 [1] CRAN (R 3.6.1)
#> rmarkdown 1.16 2019-10-01 [1] CRAN (R 3.6.0)
#> rprojroot 1.3-2 2018-01-03 [1] CRAN (R 3.6.0)
#> sessioninfo 1.1.1 2018-11-05 [1] CRAN (R 3.6.0)
#> stringi 1.4.3 2019-03-12 [1] CRAN (R 3.6.0)
#> stringr 1.4.0 2019-02-10 [1] CRAN (R 3.6.0)
#> testthat 2.2.1 2019-07-25 [1] CRAN (R 3.6.0)
#> tibble 2.1.3 2019-06-06 [1] CRAN (R 3.6.0)
#> usethis 1.5.1 2019-07-04 [1] CRAN (R 3.6.0)
#> vctrs 0.2.0 2019-07-05 [1] CRAN (R 3.6.0)
#> withr 2.1.2 2018-03-15 [1] CRAN (R 3.6.0)
#> xfun 0.10 2019-10-01 [1] CRAN (R 3.6.0)
#> yaml 2.2.0 2018-07-25 [1] CRAN (R 3.6.0)
#> zeallot 0.1.0 2018-01-28 [1] CRAN (R 3.6.0)
#>
#> [1] /Library/Frameworks/R.framework/Versions/3.6/Resources/library
这是我在 运行 直接在 R
中得到的错误 *** caught segfault ***
address 0x21, cause 'memory not mapped'
Traceback:
1: new_result(connection@ptr, statement)
2: OdbcResult(connection = conn, statement = statement)
3: dbSendQuery(conn, statement, ...)
4: dbSendQuery(conn, statement, ...)
5: .local(conn, statement, ...)
6: dbGetQuery(con, "SELECT elb_name FROM sampledb.elb_logs LIMIT 10")
7: dbGetQuery(con, "SELECT elb_name FROM sampledb.elb_logs LIMIT 10")
Possible actions:
1: abort (with core dump, if enabled)
2: normal R exit
3: exit R without saving workspace
4: exit R saving workspace
更新 我尝试了另一种方法,得到了一条不同的错误消息,这似乎与 Athena 设置更相关。如果有人已经连接到该数据库,我将不胜感激。
library(rJava)
library(RJDBC)
#> Loading required package: DBI
URL <- 'https://s3.amazonaws.com/athena-downloads/drivers/JDBC/SimbaAthenaJDBC_2.0.9/AthenaJDBC42_2.0.9.jar'
fil <- basename(URL)
if (!file.exists(fil)) download.file(URL, fil, mode="wb")
drv <- JDBC(driverClass="com.simba.athena.jdbc.Driver", classPath = fil, identifier.quote="'")
con <- jdbcConnection <- dbConnect(drv, 'jdbc:awsathena://athena.us-west-2.amazonaws.com:443/',
S3OutputLocation="s3://aws-bmw-athena-results/",
user=Sys.getenv("AWS_ACCESS_KEY_ID"),
password=Sys.getenv("AWS_SECRET_ACCESS_KEY"),
)
dfdhis2=dbGetQuery(con, "SELECT elb_name FROM sampledb.elb_logs LIMIT 10")
#> Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set for ", : Unable to retrieve JDBC result set for SELECT elb_name FROM sampledb.elb_logs LIMIT 10 ([Simba][AthenaJDBC](100071) An error has been thrown from the AWS Athena client. No output location provided. An output location is required either through the Workgroup result configuration setting or as an API input. [Execution ID not available])
由 reprex package (v0.3.0)
于 2019-11-11 创建好的,我将关闭此答案,因为我发现会话因 R 环境问题而中止。
替代连接方法
如果您想尝试另一种方法从 R 连接到 AWS Athena,您可以尝试这两个新包:noctua and RAthena。他们分别使用 AWS SDK paws
和 boto3
连接到 Athena。
正在连接到 Athena
RAthena(boto3连接方式)
因为你在环境变量中设置了 "AWS_ACCESS_KEY_ID" 和 "AWS_SECRET_ACCESS_KEY" RAthena 会为你挑选它们。
library(DBI)
con <- dbConnect(
RAthena::athena(),
s3_staging_dir = "s3://aws-athena-query-results-eu-central-1/",
region_name = "eu-central-1")
它现在将使用类似于 odbc 和 RJDBC 的 DBI 接口查询 AWS Athena。
dbListObjects(con)
dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")
noctua(爪子连接法)
与RAthena
非常相似,noctua
会选择AWS环境变量。
library(DBI)
con <- dbConnect(
noctua::athena(),
s3_staging_dir = "s3://aws-athena-query-results-eu-central-1/",
region_name = "eu-central-1")
它现在将使用类似于 odbc 和 RJDBC 的 DBI 接口查询 AWS Athena。
dbListObjects(con)
dbGetQuery(con, "SELECT * FROM sampledb.elb_logs")
总结
我希望这能为您从 R 连接到 AWS Athena 时提供另一种选择。如果您想检查这些包,请访问包文档:noctua documentation and RAthena documentation