r - 在我的 R 包中包含数据库连接

标签 r odbc dbi dbplyr roracle

每天,我都会从 R 内部连接到公司数据库。目前,我有一个 R 脚本,用于设置连接并进行所有分析前数据准备(变异和连接)。我想将其包含在 R 包 DWH 中,这样我就可以与同事分享这个过程。

这里是一些示例代码:

creds <- read.csv2('C:/creds.csv')

con <- ROracle::dbConnect(drv = DBI::dbDriver("Oracle"),
                               username = creds$user, password= creds$pwd,
                               dbname = 'DWH',
                               prefetch = FALSE, bulk_read = 1000L, stmt_cache = 0L,
                               external_credentials = FALSE, sysdba = FALSE)

PREST <- dplyr::tbl(con, dbplyr::in_schema('ADWH', 'PREST')) %>%
    transmute(date = A_DWH_DATE_TODAY,
              amount = A_DWH_POL_IND_COLL_AMOUNT)

理想情况下,我想使用 library(DWH) 加载包,然后 PREST 对象应该可供每个人进一步使用,例如

library(DWH)
PREST %>% filter(date > 201912) 

这在获取 R 脚本时效果非常好。如何在 R 包中实现此功能? 我正在使用 ROracle,但这应该与任何其他 odbc 数据库连接相同的过程。

最佳答案

虽然我同意@r2evans的观点,这不是一个好的设计决策,但如果您致力于这样做,您可以采取的方法是一个将变量分配给全局环境的函数(根据this问题) .

这看起来像:

create_globals = function(){
    creds <- read.csv2('C:/creds.csv')

    con <- ROracle::dbConnect(drv = DBI::dbDriver("Oracle"),
                                   username = creds$user, password= creds$pwd,
                                   dbname = 'DWH',
                                   prefetch = FALSE, bulk_read = 1000L, stmt_cache = 0L,
                                   external_credentials = FALSE, sysdba = FALSE)

    PREST <- dplyr::tbl(con, dbplyr::in_schema('ADWH', 'PREST')) %>%
        transmute(date = A_DWH_DATE_TODAY,
                  amount = A_DWH_POL_IND_COLL_AMOUNT)

    assign("creds", cred, envir = .GlobalEnv)
    assign("con", con, envir = .GlobalEnv)
    assign("PREST", PREST, envir = .GlobalEnv)
}

然后你的包使用看起来像:

library(DWH)
create_globals()
PREST %>% filter(date > 201912) 

关于r - 在我的 R 包中包含数据库连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61525710/

相关文章:

ruby - 我尝试使用 DBI gem 连接我的 PostgreSQL 服务器

按比例随机将 NAn 插入数据帧

oracle - 数据库驱动错误: error possibly near <*> indicator at char 15 in 'TRUNCATE TABLE <*>MONTHLY_DATA' )

dbi - JDBI:dbi.onDemand 是否比使用 dbi.open 更受欢迎?

sqlite - sqlite3表无法链接到Access

linux - ODBC 错误连接 Teradata

php - 准备好的语句不能用整数值执行多次

r - R中的正态分布图

javascript - 使用 R 读取动态 HTML 元素

R:绘制 OOB 错误率