如何在R中按块从数据库中读取数据?

如何在R中按块从数据库中读取数据?,r,dplyr,dbplyr,R,Dplyr,Dbplyr,在dplyr中,如果tbl是数据库中的一个表,那么head(tbl)将被转换为 选择 * 从…起 tbl 限制6 但是似乎没有一种方法可以使用offset关键字来读取数据块。例如,相当于 选择 * 从…起 tbl 限制6偏移量5 似乎无法使用dplyr。在dbplyr中,有一个do函数,允许您选择chunk\u大小逐块返回数据 这是在R做这件事的唯一方法吗?解决方案不必在dplyr或tidyverse中使用,我在dbplyr中使用的方法是基于添加了一个参考/ID列: my_tbl = tbl

在dplyr中,如果
tbl
是数据库中的一个表,那么
head(tbl)
将被转换为

选择
*
从…起
tbl
限制6
但是似乎没有一种方法可以使用
offset
关键字来读取数据块。例如,相当于

选择
*
从…起
tbl
限制6偏移量5
似乎无法使用
dplyr
。在
dbplyr
中,有一个
do
函数,允许您选择
chunk\u大小
逐块返回数据


这是在R做这件事的唯一方法吗?解决方案不必在
dplyr
tidyverse
中使用,我在
dbplyr
中使用的方法是基于添加了一个参考/ID列:

my_tbl = tbl(con, "table_name")

for(i in 1:100){
  sub_tbl = my_tbl %>% filter(ID %% 100 == i)

  # further processing using 'sub_tbl'
  ...
}

如果向数据集中添加一个行号,那么您的过滤器可以替换为
过滤器(LowerBound

另一种方法是构造您自己的偏移函数。这假设您的数据库支持该功能,并且该功能不太可能转移到其他类型的数据库

如下所示:

offset_head = function(table, num, offset){

  # get connection
  db_connection = table$src$con

  sql_query = build_sql(con = db_connection,
                      sql_render(table),
                      "\nLIMIT ", num,
                      "\nOFFSET ", offset
  )

  return(tbl(db_connection, sql(sql_query)))
}

您是否试用过
DBI
软件包?这将允许您向数据库发送正常查询,而不限于
dbplyr
为您翻译的内容。