我是查询数据从谷歌分析溢价使用谷歌BigQuery。目前,我只有一个查询,用于计算一些指标(如总访问率或转换率)。此查询包含多个嵌套联接子句和嵌套选择。在查询一个表时,我得到了错误:
Error: Resources exceeded during query execution.使用和JOIN似乎解决不了这个问题。
未来将采用的一种解决方案是只提取查询所需的相关数据,并将其导出到一个单独的表中(然后对表进行查询)。这个策略在原则上是可行的,我已经有了它的工作原型。
但是,我想探讨一下对原始表的这个查询的额外优化策略。
在本报告中,你可能花了太多钱买BigQuery提出了其中一些建议,即:
"Google BigQuery分析“一书还提到了调整查询功能,即:
另一种选择是将此查询拆分为它的组合子查询,但此时我无法选择此策略。
我还能做什么来优化这个查询呢?
发布于 2017-03-09 11:42:45
为什么BigQuery有错误?
BigQuery是一个共享和分布式的资源,因此,在某个时候,作业可能会失败。这就是为什么唯一的解决方案是用指数退避重试作业。作为金科玉律,作业应该至少重试5次,只要作业不能超过15分钟完成,服务就在SLA 1中。
原因是什么?
我可以考虑产生这种情况的两个原因,它们可能影响您的查询:
数据偏斜
关于第一种情况,当数据分布不均匀时,就会发生这种情况。因为BigQuery的内部机制使用MapReduce的一个版本--这意味着,例如,如果您有一个具有数百万点击率的音乐或视频文件,那么进行数据聚合的工作人员将耗尽他们的资源,而其他工作人员将不会做太多事情,因为他们正在处理的视频或音乐的聚合几乎没有点击量。
如果是这样的话,建议统一分发您的数据。
未优化查询
如果您没有修改数据的权限,那么唯一的解决方案就是优化查询。优化的查询遵循以下一般规则:
遵循任何这些策略都可以帮助您的查询减少错误,并提高其总体运行时间。
附加内容
除非您首先理解BigQuery,否则您不可能真正理解MapReduce。因此,我强烈建议您查看Hadoop教程,如教程中的教程:
对于类似版本的BigQuery,但这是开源的(而且在每一种方式中优化得都较少),您也可以检查Apache 4,如果您了解Apache失败的原因,就可以理解BigQuery失败的原因。
发布于 2016-07-07 21:15:13
谷歌的BigQuery有很多怪癖,因为它不兼容ANSI。这些怪癖也是它的优势。也就是说,直接编写针对BigQuery的查询将浪费太多时间。您应该使用API/SDK或像Looker这样的工具在执行时为您生成SQL:https://looker.com/blog/big-query-launch-blog,在花钱之前给出资源估计。
https://stackoverflow.com/questions/30763305
复制相似问题