我想用R连接到DynamoDB。我的最终目标是创建一个Shiny App来显示存储在DynamoDB中并经常更新的数据。所以我需要一种有效的方法来使用R来检索它。
以下引用给出了直觉,但它们不包含R中的本机实现,并且很长时间没有更新。
r language support for AWS DynamoDB AWS dynamodb support for "R" programming language R + httr and EC2 api authentication issues
正如上面的答案中所提到的,通过rPython
在R中运行Python将是一个选项,因为有适用于Python的SDK,例如boto3
。
另一种选择是通过RJDBC
使用JDBC驱动程序,我尝试过:
library(RJDBC)
drv <- JDBC(
driverClass = "cdata.jdbc.dynamodb.DynamoDBDriver",
classPath = "MyInstallationDir\lib\cdata.jdbc.dynamodb.jar",
identifier.quote = "'"
)
conn <- dbConnect(
drv,
"Access Key=xxx;Secret Key=xxx;Domain=amazonaws.com;Region=OREGON;"
)
(访问密钥和密钥由xxx替换)我收到错误:
Error in .verify.JDBC.result(jc, "Unable to connect JDBC to ", url) : Unable to connect JDBC to Access Key=xxx;Secret Key=xxx;Domain=amazonaws.com;Region=OREGON;
在这件事上最好的做法是什么? R有一个可行的原生解决方案吗?如果有人能指出我正确的方向,我将不胜感激。
注意:包aws.dynamodb
(https://github.com/cloudyr/aws.dynamodb)看起来很有前途,但文档缺少示例,我找不到任何教程。
我想分享一些更新,以便具有相同问题的人可以从这篇文章中受益:
首先,我想出了如何使用JDBC驱动程序进行一些调整:
library(DBI)
library(RJDBC)
drv <- JDBC(
driverClass = "cdata.jdbc.dynamodb.DynamoDBDriver",
classPath = "/Applications/CData/CData JDBC Driver for DynamoDB 2018/lib/cdata.jdbc.dynamodb.jar",
identifier.quote = "'"
)
conn <- dbConnect(
drv,
url = 'jdbc:dynamodb: Access Key=xxx; SecretKey=xxx; Domain=amazonaws.com; Region=OREGON;'
)
dbListTables(conn)
其次,我意识到reticulate
使得在R中运行Python代码非常方便(甚至超过rPython
)并最终使用网状boto3
将数据从DynamoDB获取到R.您可以参考以下文档以获取其他信息:
reticulate
boto3
- DynamoDB
最后,我听说RStudio正在计划构建一个NoSQL数据库驱动程序(它与DBI
,dbplyr
,pool
等兼容),但可能很快就会推出。
希望有人会为AWS创建一个与boto3
一样全面的R包,因为它越来越受欢迎。