如何将连接的数据从数据库提取到 IBM DSX 中的 R Notebook?
How to pull connected data from database into R Notebook in IBM DSX?
我想在 DSX 上的 R 笔记本中的数据库中引用 table。
我已经建立了到我的 GreenPlum 数据库的连接,并在我的项目中设置了一个 table 作为数据资产。在我的 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
,这似乎给出了一个明显的错误,即 url 是丢失的。所以我 运行 这个函数试图将结果分配给数据框:
R.data.frame <- getObjectStorageFile(credentials_1)
head(R.data.frame)
我最后收到的错误是:"Error in handle_url(handle, url, ...): Must specify at least one of url or handle"
我也在IBM Resource中尝试了setHadoopConfig
函数;但是,这给了我另一个错误 属性 fs.swift.service.keystone.tenant 的值不能为空。
我的主要问题是我需要向哪个函数添加 handle/url 参数?我不明白辅助函数到底在做什么,但我感觉 auth_url 对象没有被赋值。
所以,我对这个做了一点挖掘。要在 DSX 上使用 Greenplum,您可以安装 PivotalR 包。你安装它:
install.packages("PivotalR")
然后加载它:
library(PivotalR)
从那里,您可以设置到您的 Greenplum 数据库的数据库连接。根据 documentation,它为此使用了 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)
或者,您可以阅读整个 table:
dbReadTable(conn, 'my_table')
我已经 written a quick run through on querying and writing data to a PostgreSQL database 这可能对你的情况有用,因为你在 RStudio 中工作。
我能够使用 RPostgreSQL
包连接 GreenPlum 数据库。
具体来说,我需要将我的 IBM Secure Gateway 的 host/port 传递给 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)
如果您不知道安全网关的 host/port 在哪里,可以在 BlueMix 的安全网关仪表板上找到。首先,转到 BlueMix 控制台中的 "Integrate",然后 select 您的 Secure Gateway。进入仪表板后,查看 Destinations -> Settings(齿轮图标),主机和端口以 "Cloud Host : Port".
列出
注意,如果您在将连接添加到项目之前创建了 Secure Gateway 目标,则可能需要重新创建它。
我想在 DSX 上的 R 笔记本中的数据库中引用 table。
我已经建立了到我的 GreenPlum 数据库的连接,并在我的项目中设置了一个 table 作为数据资产。在我的 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
,这似乎给出了一个明显的错误,即 url 是丢失的。所以我 运行 这个函数试图将结果分配给数据框:
R.data.frame <- getObjectStorageFile(credentials_1)
head(R.data.frame)
我最后收到的错误是:"Error in handle_url(handle, url, ...): Must specify at least one of url or handle"
我也在IBM Resource中尝试了setHadoopConfig
函数;但是,这给了我另一个错误 属性 fs.swift.service.keystone.tenant 的值不能为空。
我的主要问题是我需要向哪个函数添加 handle/url 参数?我不明白辅助函数到底在做什么,但我感觉 auth_url 对象没有被赋值。
所以,我对这个做了一点挖掘。要在 DSX 上使用 Greenplum,您可以安装 PivotalR 包。你安装它:
install.packages("PivotalR")
然后加载它:
library(PivotalR)
从那里,您可以设置到您的 Greenplum 数据库的数据库连接。根据 documentation,它为此使用了 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)
或者,您可以阅读整个 table:
dbReadTable(conn, 'my_table')
我已经 written a quick run through on querying and writing data to a PostgreSQL database 这可能对你的情况有用,因为你在 RStudio 中工作。
我能够使用 RPostgreSQL
包连接 GreenPlum 数据库。
具体来说,我需要将我的 IBM Secure Gateway 的 host/port 传递给 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)
如果您不知道安全网关的 host/port 在哪里,可以在 BlueMix 的安全网关仪表板上找到。首先,转到 BlueMix 控制台中的 "Integrate",然后 select 您的 Secure Gateway。进入仪表板后,查看 Destinations -> Settings(齿轮图标),主机和端口以 "Cloud Host : Port".
列出注意,如果您在将连接添加到项目之前创建了 Secure Gateway 目标,则可能需要重新创建它。