从bigrquery和dbplyr生成的BigQuery的优化?

时间:2019-11-11 02:19:05

标签: dplyr google-bigquery tidyverse dbplyr bigrquery

dplyr函数通常具有令人难以置信的性能,并已通过开源R社区进行了优化,许多函数甚至在后台运行c++以使它们很多更快。

通过bigrquerydbplyr生成的BigQuery代码是否得到了任何优化,还是只是生成了sql而未优化(却未优化)? (请注意,bigrquerydbplyr(如dplyr也是tidyverse软件包,都是由dplyr作者Hadley Wickham创作的)

背景

我对所生成的BigQuery代码的优化方式感兴趣,因为我试图确定是否值得进一步优化由 <{1}}和bigrquery编写的某些批处理过程em>手动 重写一些BigQuery代码(而不是使用这些软件包)。如果我不太可能看到显着的性能改进,我将不花时间进行改进。

查询示例

以下是来自the bigrquery readme

dbplyr

1 个答案:

答案 0 :(得分:0)

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

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

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

但是,我在SQL Server而不是bigquery上使用dbplyr。因此,您必须判断它对您的上下文的泛化程度。