首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >谷歌BigQuery优化策略

谷歌BigQuery优化策略
EN

Stack Overflow用户
提问于 2015-06-10 17:28:24
回答 2查看 3.2K关注 0票数 2

我是查询数据从谷歌分析溢价使用谷歌BigQuery。目前,我只有一个查询,用于计算一些指标(如总访问率或转换率)。此查询包含多个嵌套联接子句和嵌套选择。在查询一个表时,我得到了错误:

代码语言:javascript
复制
Error: Resources exceeded during query execution.

使用和JOIN似乎解决不了这个问题。

未来将采用的一种解决方案是只提取查询所需的相关数据,并将其导出到一个单独的表中(然后对表进行查询)。这个策略在原则上是可行的,我已经有了它的工作原型。

但是,我想探讨一下对原始表的这个查询的额外优化策略。

在本报告中,你可能花了太多钱买BigQuery提出了其中一些建议,即:

  • 缩小扫描范围(已经在做了)
  • 使用查询缓存(不适用)

"Google BigQuery分析“一书还提到了调整查询功能,即:

  • GROUP子句生成大量不同的组(已经这样做了)
  • 要求内存与输入值的数量成比例的聚合函数(可能不适用)
  • 连接操作,产生比输入更多的输出(似乎不适用)

另一种选择是将此查询拆分为它的组合子查询,但此时我无法选择此策略。

我还能做什么来优化这个查询呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-03-09 11:42:45

为什么BigQuery有错误?

BigQuery是一个共享和分布式的资源,因此,在某个时候,作业可能会失败。这就是为什么唯一的解决方案是用指数退避重试作业。作为金科玉律,作业应该至少重试5次,只要作业不能超过15分钟完成,服务就在SLA 1中。

原因是什么?

我可以考虑产生这种情况的两个原因,它们可能影响您的查询:

  1. 数据倾斜2
  2. 未优化查询

数据偏斜

关于第一种情况,当数据分布不均匀时,就会发生这种情况。因为BigQuery的内部机制使用MapReduce的一个版本--这意味着,例如,如果您有一个具有数百万点击率的音乐或视频文件,那么进行数据聚合的工作人员将耗尽他们的资源,而其他工作人员将不会做太多事情,因为他们正在处理的视频或音乐的聚合几乎没有点击量。

如果是这样的话,建议统一分发您的数据。

未优化查询

如果您没有修改数据的权限,那么唯一的解决方案就是优化查询。优化的查询遵循以下一般规则:

  • 使用SELECT时,请确保只严格选择所需的列,因为这会减少请求的基数(例如,避免使用select *)
  • 避免在大型数据集上使用ORDER子句
  • 避免使用GROUP子句,因为它们会造成并行性的障碍。
  • 避免使用联接,因为这会对工作人员的内存造成极大的负担,并可能导致资源饥饿和资源错误(如内存不足)。
  • 避免使用分析函数3
  • 如果可能,对已分区表4执行查询。

遵循任何这些策略都可以帮助您的查询减少错误,并提高其总体运行时间。

附加内容

除非您首先理解BigQuery,否则您不可能真正理解MapReduce。因此,我强烈建议您查看Hadoop教程,如教程中的教程:

对于类似版本的BigQuery,但这是开源的(而且在每一种方式中优化得都较少),您也可以检查Apache 4,如果您了解Apache失败的原因,就可以理解BigQuery失败的原因。

1

2

3.

4.

5

票数 6
EN

Stack Overflow用户

发布于 2016-07-07 21:15:13

谷歌的BigQuery有很多怪癖,因为它不兼容ANSI。这些怪癖也是它的优势。也就是说,直接编写针对BigQuery的查询将浪费太多时间。您应该使用API/SDK或像Looker这样的工具在执行时为您生成SQL:https://looker.com/blog/big-query-launch-blog,在花钱之前给出资源估计。

票数 -8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30763305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档