如何在R中从SQL Server直接获取data.table类型数据?
如何用DBI+odbc直接获取data.table类型的数据?
当然有办法直接获取data.table类型的数据,以下是几种高效的实现方式:
方法1:事后快速转换(最简单)
data.table包提供的setDT()函数可以原地将data.frame转换为data.table,几乎没有额外性能开销,是最便捷的方式:
connection <- DBI::dbConnect(...) data <- DBI::dbGetQuery(connection, SQL_statement) data.table::setDT(data) # 直接修改原对象,转换为data.table
如果你不想修改原对象,也可以用as.data.table()生成新的data.table对象:
data <- data.table::as.data.table(DBI::dbGetQuery(connection, SQL_statement))
方法2:手动拆分查询流程(更"直接"的获取)
dbGetQuery()本质是dbSendQuery()+dbFetch()+dbClearResult()的组合操作,你可以手动拆分这个流程,直接将查询结果转为data.table:
connection <- DBI::dbConnect(...) # 发送查询请求 rs <- DBI::dbSendQuery(connection, SQL_statement) # 获取结果并直接转为data.table data <- data.table::as.data.table(DBI::dbFetch(rs)) # 清理查询结果对象 DBI::dbClearResult(rs)
这两种方法都能高效得到data.table类型的数据,其中setDT()因为是原地修改,性能最优,适合处理大数据集。
内容的提问来源于stack exchange,提问作者Marcus Willems
相关产品推荐
相关产品推荐

