什么: 需要使用 RStudio 工作台和 Trino 连接从数据库获取数据。
问题:总是出错。使用相同的方法连接到 presto 主机工作正常。 Trino 驱动程序版本是 443(撰写本文时最新版本)
约束:必须是 JDBC 连接。这是一个企业环境,因此测试或影响 RStudio 更改的能力有限,但某些软件包安装等可能会受到影响。
我需要什么:关于我的代码有什么问题的指导?如果问题不是我的代码,那么需要在 RStudio 工作台中进行哪些更改才能使其正常工作。
代码:
dyn.load(
'/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.402.b06-1.amzn2.0.1.x86_64/jre/lib/amd64/server/libjvm.so'
)
library(DBI)
library(RJDBC)
user <<- Sys.info()[['user']]
pwd <- rstudioapi::askForPassword(prompt = "Enter SSO Password")
home <- paste0("/mnt/efs/users/",user)
cert_path <- "/connections/starburst/"
certificate <- "SHA2-CA-Bundle.cer"
certificate2 <- "sep.jks"
jar_files = c(list.files(paste0(home,cert_path),
pattern="jar$",
full.names=T)
)
# driver_class <- "io.trino.jdbc.NonRegisteringTrinoDriver"
driver_class <- "io.trino.jdbc.TrinoDriver"
drv <- RJDBC::JDBC(driverClass = driver_class,
classPath = jar_files)
host <-
"jdbc:trino://myhost.com:111/hive"
server <-
paste0(
host,
"?user=", user,
"&password=", pwd,
# "&SSL=true",
"&SSLVerification=CA",
# "&SSLTrustStorePath=", home, cert_path, certificate,
"&SSLKeyStorePath=",home, cert_path, certificate2
)
server
conn <<- DBI::dbConnect(drv, server)
query_input <- "SELECT count(*) FROM some.table"
output <- dbGetQuery(conn, query_input)
View(output)
dbDisconnect(conn)
错误:
Error in .verify.JDBC.result(r, "Unable to retrieve JDBC result set", :
Unable to retrieve JDBC result set
JDBC ERROR: Error executing query: Error fetching next (attempts: 4, duration: 2.01m)
Statement: SELECT count(*) FROM some.table
问题
您的问题的后续,我了解您需要建立从 RStudio Workbench 到 Trino(以前称为 PrestoSQL)数据库的 JDBC 连接来获取数据。但是,您在连接过程中遇到错误。使用相同的方法连接到 Presto 主机工作正常,但连接到 Trino 会导致错误。
解决方案
SSL 和防火墙可能主要是由于您的连接错误造成的。但要遵循最佳实践。
终于
要通过星爆连接器在 R 工作台上执行 SQL,我在下面提供了基本的示例代码片段供您查看:
library(DBI)
library(RJDBC)
# Set up JDBC connection parameters
driver_class <- "io.trino.jdbc.TrinoDriver"
host <- "jdbc:trino://your_starburst_host:port"
user <- "your_username"
password <- "your_password"
# Set up SSL settings if applicable
# ssl <- "&SSL=true&SSLTrustStorePath=/path/to/truststore&SSLTrustStorePassword=your_truststore_password"
# Construct JDBC connection string
conn_string <- paste0(host, "?user=", user, "&password=", password)
# Establish JDBC connection
conn <- dbConnect(RJDBC::JDBC(driverClass = driver_class), conn_string)
# Execute SQL query
query <- "SELECT * FROM your_table"
result <- dbGetQuery(conn, query)
# Display or further process the query result
print(result)
# Close the JDBC connection
dbDisconnect(conn)
将 your_starburst_host、port、your_username、your_password 和 your_table 等占位符替换为您的实际连接详细信息和 SQL 查询。此外,如果您使用 SSL,请相应地取消注释并修改 ssl 变量。
问候,