优化由bigrquery和dbplyr生成的BigQuery?
优化由bigrquery和dbplyr生成的BigQuery?,r,dplyr,google-bigquery,dbplyr,bigrquery,R,Dplyr,Google Bigquery,Dbplyr,Bigrquery,dplyr函数的性能通常令人难以置信,开源R社区对其进行了优化,许多函数甚至在引擎盖下运行c++,使其运行速度更快 通过bigrquery和dbplyr生成的BigQuery代码是否得到了任何优化,或者它只是以任何方式生成sql(未经优化)?(请注意,bigrquery和dbplyr,如dplyr都是tidyverse软件包,都是由dplyr作者Hadley Wickham编写的) 背景 我对生成的BigQuery代码的优化程度感兴趣,因为我正在尝试决定是否值得通过手动重写一些BigQuery代
dplyr
函数的性能通常令人难以置信,开源R社区对其进行了优化,许多函数甚至在引擎盖下运行c++
,使其运行速度更快
通过bigrquery
和dbplyr
生成的BigQuery代码是否得到了任何优化,或者它只是以任何方式生成sql(未经优化)?(请注意,bigrquery
和dbplyr
,如dplyr
都是tidyverse软件包,都是由dplyr作者Hadley Wickham编写的)
背景
我对生成的BigQuery代码的优化程度感兴趣,因为我正在尝试决定是否值得通过手动重写一些BigQuery代码(而不是使用那些包)来进一步优化在bigrquery
和dbplyr
中编写的一些批处理过程。如果我不太可能看到巨大的性能改进,我不会花时间去做
示例查询
以下内容来自
库(dplyr)
出生率%
选择(年、月、日、体重)%>%
总分(10)%>%
收集
这可能取决于您的优化目标。例如,运行时或定价
根据我的经验,我主要关注运行时:
- 使用默认生成的查询没有性能(运行时)问题,尽管我还没有对此进行广泛测试
确实包括一些基本的查询优化dbplyr
- 在人类阅读代码的地方需要人类编写的代码,而在只有机器才能阅读代码的地方,机器编写的代码就可以了
- 我注意到,在特别复杂的操作(多个联接或滞后/超前)期间,将中间表保存到disc的速度最大,向中间表添加索引的速度更高(运行时下降到四分之一或更少)
- 还可以通过手动批处理记录来减少运行时间。例如,筛选到所有偶数ID号,运行并保存分析,使用所有奇数ID号重复,并将结果附加在一起。但这可能是因为我使用了较旧版本的SQL
但是,我在SQL server中使用的是
dbplyr
,而不是bigquery。因此,您必须判断它对您的上下文的概括程度。您是否查看了由dbplyr
生成的自动生成的bigrquery
/sql
代码?@Simon.S.A。好主意。我试过了。我看到的是复杂的BigQuery代码,所以我无法判断它是否经过优化
library(dplyr)
natality <- tbl(con, "natality")
natality %>%
select(year, month, day, weight_pounds) %>%
head(10) %>%
collect()