【问题标题】:Optimisation of BigQuery generated from bigrquery and dbplyr?从 bigrquery 和 dbplyr 生成的 BigQuery 的优化?
【发布时间】:2020-03-06 18:04:38
【问题描述】:

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

通过bigrquerydbplyr 生成的BigQuery 代码是否接受了任何优化,或者它是否只是生成了可以(未优化)的sql? (注意bigrquerydbplyrdplyr 一样都是tidyverse 包,都是由dplyr 作者Hadley Wickham 编写的)

背景

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

查询示例

以下来自the bigrquery readme

library(dplyr)

natality <- tbl(con, "natality")

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

【问题讨论】:

  • 您查看过由dbplyr 生成的自动生成的bigrquery/sql 代码吗?
  • @Simon.S.A.好点子。我已经试过了。我看到的是复杂的 BigQuery 代码,所以我无法判断它是否经过优化

标签: r dplyr google-bigquery dbplyr bigrquery


【解决方案1】:

这可能取决于您的优化目标。例如。运行时或定价。

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

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

但是,我将 dbplyr 与 SQL 服务器一起使用,而不是 bigquery。所以你必须判断它对你的上下文的概括程度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多