0

dplyr功能通常具有令人难以置信的性能,已由开源 R 社区进行了优化,许多功能甚至c++在引擎盖下运行以使它们更快

BigQuery 代码是否通过bigrquerydbplyr接收任何优化生成,或者它是否只是生成 sql 但它可以(未优化)?(请注意,bigrqueryand 和dbplyrlikedplyr也是 tidyverse 包,均由 dplyr 的作者 Hadley Wickham 编写)

背景

我对生成的 BigQuery 代码的优化程度很感兴趣,因为我试图决定是否值得进一步优化一些写入的批处理过程并bigrquery手动重写一些 BigQuery 代码(而不是使用这些包)。如果我不太可能看到巨大的性能改进,我不会花时间这样做。dbplyr

示例查询

以下内容来自自述bigrquery文件

library(dplyr)

natality <- tbl(con, "natality")

natality %>%
  select(year, month, day, weight_pounds) %>% 
  head(10) %>%
  collect()
4

1 回答 1

0

这可能取决于您要优化的内容。例如运行时或定价。

根据我的经验,专注于运行时:

  • 使用默认生成的查询没有性能(运行时)问题,尽管我没有对此进行广泛测试。
  • dbplyr确实包括1.0.0 版的一些基本查询优化
  • 人类可以阅读代码的地方需要人工编写的代码,只有机器才能阅读代码的机器编写的代码很好。
  • 我注意到在特别复杂的操作(多个连接或滞后/超前)期间将中间表保存到磁盘时速度最快,向中间表添加索引会进一步加快速度(运行时间下降到四分之一或更少)。
  • 还通过手动批处理记录减少了运行时间。例如过滤到所有偶数 ID 号,运行并保存分析,重复所有奇数 ID 号,并将结果附加在一起。但这可能是由于我使用的是旧版本的 SQL。

但是,我使用dbplyr的是 SQL 服务器,而不是 bigquery。因此,您必须判断它对您的上下文的概括程度。

于 2019-11-11T20:14:34.967 回答