如何从BigQuery将大型数据集加载到R?

如何从BigQuery将大型数据集加载到R?,r,google-bigquery,bigrquery,R,Google Bigquery,Bigrquery,我试过两种方法来包装这样的东西 library(bigrquery) library(DBI) con <- dbConnect( bigrquery::bigquery(), project = "YOUR PROJECT ID HERE", dataset = "YOUR DATASET" ) test<- dbGetQuery(con, sql, n = 10000, max_pages = Inf) 及 但未能解决错误:请求的资源太大,无法返回[respons

我试过两种方法来包装这样的东西

library(bigrquery)
library(DBI)

con <- dbConnect(
  bigrquery::bigquery(),
  project = "YOUR PROJECT ID HERE",
  dataset = "YOUR DATASET"
)
test<- dbGetQuery(con, sql, n = 10000, max_pages = Inf)

但未能解决错误:请求的资源太大,无法返回[responseTooLarge],这可能是一个相关问题,但我对完成工作的任何工具都感兴趣:我已经尝试了概述的解决方案,但都失败了


如何从BigQuery将大型数据集加载到R?

正如@hrbrmstr建议的那样,特别提到:

在r-project.org的本文档中,您将阅读以下不同的建议:

这将以页面大小的块检索行。这是最适合的
较小查询的结果我也刚开始使用BigQuery。我想应该是这样的

当前的bigrquery版本可以从CRAN安装:

install.packages("bigrquery")
最新的开发版本可以从GitHub安装:

install.packages('devtools')
devtools::install_github("r-dbi/bigrquery")
用法 低级API

library(bigrquery)
billing <- bq_test_project() # replace this with your project ID 
sql <- "SELECT year, month, day, weight_pounds FROM `publicdata.samples.natality`"

tb <- bq_project_query(billing, sql)
#> Auto-refreshing stale OAuth token.
bq_table_download(tb, max_results = 10)
DBI


这对我起了作用

# Make page_size some value greater than the default (10000)
x <- 50000

bq_table_download(tb, page_size=x)
注意,在我的例子中,如果您将页面大小设置为任意高的值100000,您将开始看到很多空行


对于给定的表大小,正确的页面大小值应该是多少,仍然没有找到一个好的经验法则。

为什么要向下投票?我可以很容易地用其他语言(比如Python)来做这个操作,但是对于R来说,似乎没有简单的方法,除非找到一些切分选项或类似的方法。你确定吗?@hrbrmstr我明白了,我没想到该工具不会像Python中的Pandas read_gbq那样使用批处理或分片下载,我目前对大型数据集使用上述方法,但直接从R更方便。真的没有像read_gbq这样的R批量下载选项吗?我在问题中演示了这种方法,但错误是:请求的资源太大,无法返回[ResponseToolage],你有没有找到办法用更大的数据集来解决这个错误?
library(bigrquery)
billing <- bq_test_project() # replace this with your project ID 
sql <- "SELECT year, month, day, weight_pounds FROM `publicdata.samples.natality`"

tb <- bq_project_query(billing, sql)
#> Auto-refreshing stale OAuth token.
bq_table_download(tb, max_results = 10)
library(DBI)

con <- dbConnect(
  bigrquery::bigquery(),
  project = "publicdata",
  dataset = "samples",
  billing = billing
)
con 
#> <BigQueryConnection>
#>   Dataset: publicdata.samples
#>   Billing: bigrquery-examples

dbListTables(con)
#> [1] "github_nested"   "github_timeline" "gsod"            "natality"       
#> [5] "shakespeare"     "trigrams"        "wikipedia"

dbGetQuery(con, sql, n = 10)



library(dplyr)

natality <- tbl(con, "natality")

natality %>%
  select(year, month, day, weight_pounds) %>% 
  head(10) %>%
  collect()
# Make page_size some value greater than the default (10000)
x <- 50000

bq_table_download(tb, page_size=x)