Как вытащить связанные данные из базы данных в R Notebook в IBM DSX?

Я хотел бы сослаться на таблицу в базе данных в записной книжке R на DSX.

Я установил соединение с моей базой данных GreenPlum и настроил одну таблицу в качестве актива данных в моем проекте. В моей записной книжке R я перешел к "Соединениям" и создал список с моими учетными данными для базы данных:

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.

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)

В итоге я получаю сообщение об ошибке: "Ошибка в handle_url (handle, url,...): необходимо указать хотя бы один из URL или handle"

Я также попробовал setHadoopConfig функционировать в IBM Resource; однако это дало мне еще одну ошибку для значения свойства fs.swift.service.keystone.tenant не должно быть нулевым.

Мой главный вопрос - к какой функции мне нужно добавить аргумент handle/url? Я не совсем понимаю, что делает вспомогательная функция, но у меня есть ощущение, что объект auth_url не назначается.

2 ответа

Решение

Мне удалось подключить базу данных GreenPlum с помощью RPostgreSQL пакет.

В частности, мне нужно было передать хост / порт моего 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)

Если вы не знаете, где находится хост / порт вашего безопасного шлюза, это можно найти на панели мониторинга безопасного шлюза BlueMix. Сначала перейдите к "Интегрировать" в консоли BlueMix, затем выберите свой Secure Gateway. Находясь в панели управления, посмотрите в пункт "Назначения" -> "Настройки" (значок шестеренки), и хост и порт будут перечислены с "Cloud Host: Port".

Если вам захочется, вам может потребоваться воссоздать пункт назначения Secure Gateway, если вы создали его перед добавлением соединения в ваш проект.

Итак, я немного покопался в этом. Для работы с Greenplum на DSX вы можете установить пакет PivotalR. Вы устанавливаете это с:

install.packages("PivotalR")

Затем загрузите его:

library(PivotalR)

Оттуда вы можете настроить соединение базы данных с вашей базой данных Greenplum. Согласно документации, для этого используется пакет 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')  

Я написал краткий обзор запросов и записи данных в базу данных PostgreSQL, которая может быть полезна для вашего случая, так как вы работаете внутри RStudio.

Другие вопросы по тегам