Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化由bigrquery和dbplyr生成的BigQuery?_R_Dplyr_Google Bigquery_Dbplyr_Bigrquery - Fatal编程技术网

优化由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()