RSQLite 和 R 中的目标

问题描述 投票:0回答:1

我想创建一个用于高效查询的数据库,但与目标一起使用。 有没有更好的替代方法来打开和关闭连接?

  tar_target(database, format = "file", command = {
    db_file_name <- Sys.getenv("DB_PATH", "database.sqlite")
    db <- dbConnect(SQLite(), db_file_name)
    
    dta_to_db(db, crsp_daily, "crsp_daily")
    dta_to_db(db, crsp_monthly, "crsp_monthly")
    dta_to_db(db, analist_coverage, "analist_coverage")
    dbwriteTable(db, industry_classification, "industry_classification")
    
    dbDisconnect(db)
    db_file_name
  })
r target rsqlite
1个回答
0
投票

我已经开始使用 sqltargets 和 duckdb,我现在使用的模式是:

在源自

_targets.R
的 R 脚本中:

load_tables_to_db <- function(...) {
  tables <- lst(...)
  path_to_db <- fs::path("<path_to_db>")

  con <- DBI::dbConnect(
    duckdb::duckdb(),
    dbdir = path_to_db,
    read_only = FALSE
  )
  on.exit(DBI::dbDisconnect(con, shutdown = TRUE))
  walk2(tables, names(tables), \(df, nm) DBI::dbWriteTable(conn = con, name = nm, value = df, overwrite = TRUE))
}

_targets.R

...
  tar_target(table1, mtcars),
  tar_target(table2, iris),
  tar_target(tables_loaded_to_db, load_tables_to_db(table1, table2)),
  tar_sql(report1, "query1.sql")
...
© www.soinside.com 2019 - 2024. All rights reserved.