我想在DSX上的R笔记本中引用数据库中的表。
我已建立与GreenPlum数据库的连接,并在我的项目中将一个表设置为数据资产。在我的R笔记本中,我已导航到“Connections”并使用我的数据库凭据创建了一个列表:
credentials_1 <-list(database = "database",password =
"password",sg_service_url = "https://sgmanager.ng.bluemix.net",port =
"1111",host = "111.111.111.11",sg_gateway_id = "XXXXXXX_prod_ng",username =
"username",sg_security_token = "XXXXXX",connection_path =
"/analytics/ibm_test")
接下来,我使用了这个IBM Resource.
的辅助函数getObjectStorageFile <- function(credentials) {
if(!require(httr)) install.packages('httr')
if(!require(RCurl)) install.packages('RCurl')
library(httr, RCurl)
auth_url <- paste(credentials[['sg_service_url']],'/v3/auth/tokens', sep= '')
auth_args <- paste('{"auth": {"identity": {"password": {"user": {"domain": {"id": ', credentials[['domain_id']],'},"password": ',
credentials[['password']],',"name": ', credentials[['username']],'}},"methods": ["password"]}}}', sep='"')
auth_response <- httr::POST(url = auth_url, body = auth_args)
x_subject_token <- headers(auth_response)[['x-subject-token']]
auth_body <- content(auth_response)
access_url <- unlist(lapply(auth_body[['token']][['catalog']], function(catalog){
if((catalog[['type']] == 'object-store')){
lapply(catalog[['endpoints']], function(endpoints){
if(endpoints[['interface']] == 'public' && endpoints[['region_id']] == credentials[['region']]) {
paste(endpoints[['url']], credentials[['container']], credentials[['filename']], sep='/')}
})
}
}))
data <- content(httr::GET(url = access_url, add_headers ("Content-Type" = "application/json", "X-Auth-Token" = x_subject_token)), as="text")
textConnection(data)
}
请注意,我将auth_url <- ....'auth_url'
更改为auth_url <- ....'sg_service_url'
,因为我插入的凭据没有auth_url
,而且似乎显示错误的网址丢失。所以我在尝试将结果分配给数据框时运行了这个函数:
R.data.frame <- getObjectStorageFile(credentials_1)
head(R.data.frame)
我最终收到的错误是:“handle_url中的错误(句柄,网址,...):必须至少指定一个网址或句柄”
我还在IBM Resource内尝试了setHadoopConfig
功能;但是,这给了我另一个错误属性fs.swift.service.keystone.tenant的值不能为空。
我的主要问题是我需要添加句柄/ url参数的哪个函数?我不明白帮助函数究竟在做什么,但我感觉没有分配auth_url对象。
答案 0 :(得分:0)
所以,我对这一点进行了一些挖掘。要在DSX上使用Greenplum,您可以安装PivotalR软件包。您可以使用以下命令安装:
install.packages("PivotalR")
然后加载它:
library(PivotalR)
从那里,您可以设置与Greenplum数据库的数据库连接。根据{{3}},它使用RPostgreSQL包。因此,基本连接示例可能是:
drv <- dbDriver( "PostgreSQL" )
db <- 'myDatabase'
host_db <- 'mydb1.example.com'
db_port <- '98939'
db_user <- 'henryviii'
db_password <- 'happydays'
conn <- dbConnect(drv, dbname=db, host=host_db, port=db_port, user=db_user, password=db_password)
然后运行SQL查询,如:
myQuery<- dbSendQuery(conn, 'select some_column from my_table;')
result <- fetch(myQuery)
或者,您可以阅读整个表格:
dbReadTable(conn, 'my_table')
我documentation因为您在RStudio内部工作而对您的案件有用。
答案 1 :(得分:0)
我能够使用RPostgreSQL
包连接GreenPlum数据库。
具体来说,我需要将IBM Secure Gateway的主机/端口传递给dbConnect
函数
library(RPostgreSQL) ## Load library
## Assign Credentials
drv <- dbDriver( "PostgreSQL" )
db <- "database_name"
host_db <- "cap-sg-prd-5.integration.ibmcloud.com" ### IBM SG host link
db_port <- 18999 ## IBM SG port as an integer
db_user <- "username"
db_password <- "password"
## Make the connection
conn <- dbConnect(drv, dbname=db, host=host_db, port=db_port, user=db_user, password=db_password)
如果您不知道Secure Gateway的主机/端口在哪里,可以在BlueMix的Secure Gateway Dashboard上找到。首先,转到&#34;整合&#34;在BlueMix控制台中,然后选择您的Secure Gateway。进入仪表板后,查看目的地 - &gt;设置(齿轮图标)以及主机和端口与&#34;云主机:端口&#34;一起列出。
抬头,如果您在将连接添加到项目之前创建了此目标,则可能需要重新创建Secure Gateway目标。