我对使用服务器进行数据分析非常陌生,我对“tbl_df”“tbl”“data.frame”对象和“tbl_Redshift”“tbl_dbi”“tbl_sql”“tbl_lazy”“tbl”是什么完全感到困惑在 R 中?我知道与 Redshift 服务器和 tbl-lazy 表相关的东西,但仅此而已。
我一直在关注以前分析师的工作,我使用collect()将一堆数据拉到本地计算机上,在尝试将其上传回服务器之前进行一些转换。但是,由于某种原因,我无法使用compute()上传数据,我相信原因是因为对象本身从“tbl_Redshift”“tbl_dbi”“tbl_sql”“tbl_lazy”变成了“tbl_df”“tbl”“data.frame” “tbl”。
有没有办法将其转换回来以便我可以上传它?预先感谢。
让我们首先确保核心概念清晰:
tbl_df
、tbl
和data.frame
都是本地对象,数据存在于本地 R 内存中。tbl_Redshift
、tbl_dbi
和tbl_sql
都是远程对象,其中数据存在于数据库中,并且 R 在本地 R 内存中具有指向数据库的指针/查询/连接。collect
命令将数据从远程数据库检索到本地 R 内存中。因此,它将 tbl_Redshift
、tbl_dbi
或 tbl_sql
类型的对象转换为 tbl_df
、tbl
、0r data.frame
类型的对象。
compute
命令适用于远程对象(tbl_Redshift
、tbl_dbi
或tbl_sql
),并将计算的临时/中间阶段保存到数据库,从而创建新的远程对象。这有助于减少额外的计算。它不能用于从本地 R 内存复制数据。
换句话说:
collect
:远程数据输入->本地数据输出compute
:远程数据输入->远程数据输出听起来你需要的是:本地数据输入->远程数据输出。
为此,有两种广泛的选择:
collect
。如果数据从未从服务器复制到本地 R 内存中,那么您永远不必将其传回。DBI::dbWriteTable
命令。下面的示例函数。copy_from_r_to_sql <- function(db_conn, db, schema, sql_table_name, r_table_name) {
DBI::dbWriteTable(
db_conn,
DBI::Id(
catalog = db,
schema = schema,
table = sql_table_name
),
r_table_name
)
}
(这是我的 dbplyr 助手之一的精简版这里)