如何使用rpresto通过https连接到数据库?

时间:2019-09-12 00:40:10

标签: r https presto

当我尝试通过新端口连接到数据库时,出现以下错误:

 Error in curl::curl_fetch_memory(url, handle = handle) : 
  Recv failure: Connection reset by peer 

已经为我提供了这个Python示例:

prestoconnector = presto.connect(host='presto.###.####.######.com', 
                                 port='###',
                                 protocol='https',
                                 username='{ad_username}',
                                 password='{ad_password}')

(上面的#混淆了地址和端口号)

我已经使用R中的dbConnect函数更新了相应位置的所有内容,但是我看不到任何地方可以指定我们正在使用https协议。我相信这是我的问题。

我仔细阅读了RPresto软件包和DBI软件包的文档,但是没有发现任何帮助。搜索非常具有挑战性,因为结果中存在网址,因此搜索词https的误报很多。

presto <- dbConnect(
  Presto(),
  user = #####,
  password = #####,
  host = "presto.###.####.######.com",
  port = ###,
  catalog = "hive",
  schema = ""
)

我希望能够连接,但无法连接。我可以通过不同的端口使用不同的设置进行连接。旧端口很快将不可用,所有连接都需要通过https在新端口上进行。我的团队是组织中唯一使用R的团队,因此很遗憾,内部支持没有帮助。

2 个答案:

答案 0 :(得分:0)

我想出了如何将rpresto切入循环

在此处下载Presto驱动程序:https://repo1.maven.org/maven2/com/facebook/presto/presto-jdbc/0.225/presto-jdbc-0.225.jar

然后此代码将您连接到数据库

library(rJava)
library(RJDBC)
new_presto_driver <- JDBC(classPath = "path/to/driver/referenced/above.jar"))

presto_jdbc <- dbConnect(
  new_presto_driver,
  user = "dlucas",
  password = "password",
  url = "jdbc:presto://presto.###.com:PORT_NUMBER/CATALOG",
  SSL = true
)

当然,请使用数据库的相关值替换PORT_NUMBER和CATALOG

如果在加载rJava时出错,则可能需要在终端中输入以下内容:

sudo R CMD javareconf

每次更新Java时,都可能需要重复此操作

@Lamanus和@ebyhr都提供了有用的线索,使我指出了正确的方向。

答案 1 :(得分:0)

我在使用RPresto和dplyr时遇到了麻烦,对我而言,这是由自签名的ssl证书引起的。我必须通过ssl_verifypeer = 0L在客户端禁用证书验证才能使其工作:

library(dplyr)
library(RPresto)
library(httr)

userpwd <- paste('username', 'password', sep=":")
set_config( config( ssl_verifypeer = 0L, userpwd=userpwd ) )

db <- src_presto(
  host= "https://my-hostname.com",
  port= 443,
  catalog= "catalog"
)

resultset <- tbl(db, sql("select id, field1 from my_db.my_table limit 5"))