r语言 - dplyr / bigrquery 在 BigQuery 中查询/绑定相同模式的多个表的方式?



使用本自述文件中概述的方法,可以直接查询单个表,如下所示

library(bigrquery)
library(dplyr)
natality <- tbl(con, "natality")
natality %>%
select(year, month, day, weight_pounds) %>% 
head(10) %>%
collect()

这允许我们针对natality编写常规dplyr代码,bigrquerydplyr代码转换为 BigQuery 查询。

但假设natality表是 2 个(或更多(名为natality1natality2的独立表,并且它们可以rbind在一起。

如何使用 BigQuery 执行此操作?也就是说,如何查询这些单独的表,就好像它们都作为一个表一样?

我尝试了什么

我以为bind_rows可能有效,但事实并非如此。

library(bigrquery)
library(dplyr)
natality1 <- tbl(con, "natality1")
natality2 <- tbl(con, "natality2")
natality1 %>% bind_rows(., natality2) %>%
select(year, month, day, weight_pounds) %>% 
head(10) %>%
collect()

笔记

  • 文档的扫描没有发现任何明显的东西(但可能有一些东西(。
  • BigQuery 支持用于选择/移动文件的通配符。我不确定这种支持是否扩展到BigQuery和bigrquery

我不知道dbplyr具有rbind功能。也许是因为不是每个数据库后端都支持它?

我在 SQL Server中解决此问题的方法是使用编写显式UNION ALL查询的自定义函数(相当于rbind的 SQL Server(。下面是一个 SQL 的示例函数(链接到此方法中的其他函数(。也许这个例子可以作为等效bigquery方法的灵感?

union_all = function(table_a,table_b){
# extract the connection
db_connection = table_a$src$con
sql_query = build_sql(con = db_connection,
sql_render(table_a), # the SQL code that defines table A
"nUNION ALLn", # insert union all command between them
sql_render(table_b) # the SQL code that defines table B
)
return(tbl(db_connection, sql(sql_query)))
}

这个想法是,union_all()返回一个由查询定义的远程表对象,其中包含rbind等效命令。

最新更新