繁体   English   中英

BigQuery-无法通过批处理API提交查询

[英]BigQuery - unable to submit queries via batch API

我们的应用程序通过BigQuery的批处理API批处理查询并提交。 我们已经提交了几批查询,这些查询的作业现在已经处于“运行”状态一个多小时了。 根据status.cloud.google.com ,所有系统均为绿色,但对我们而言似乎并非如此。

还有其他人遇到类似的行为吗? FWIW-由于超出了并发速率限制(由于上述卡住的工作),通过BQ Web UI提交查询不再对我们有效,因此出现了严重错误……

您可以通过批处理API提交查询。 看起来您正在快速地执行此操作,并且使用了计算量大的查询,因此它们彼此竞争并放慢了速度。

看起来您在18日大约同时(几次)提交了大约200个工作,而17日大约提交了2.5万个工作。

这些都是以交互式查询优先级提交的,并且几乎所有它们都立即失败,并出现速率限制超出错误,从而使您提交的每组查询中运行的大约50个查询的最大并发配额限制。

抽查其中一些查询:这是计算量大的查询。 查看查询的帐单层( https://cloud.google.com/bigquery/pricing#high-compute ),该文件可在jobs中找到。在此处获取输出: https ://cloud.google.com/ bigquery / docs / reference / v2 / jobs#statistics.query.billingTier 这些查询似乎也正在重新计算相同(或至少非常相似)的中间联接结果。

当您同时运行50个大型查询时,它们将相互竞争资源并减慢速度。

您可能需要研究几个问题:

  • 您正在以交互式查询优先级提交大量查询,这具有相当严格的并发速率限制 如果要同时运行许多查询,请尝试使用批处理查询优先级。 https://cloud.google.com/bigquery/docs/reference/v2/jobs#configuration.query.priority
  • 您的查询组合看起来可以优化。 您能否通过一个联接操作来实现所有查询通用的一些中间结果,然后针对这些结果运行许多较小的查询?
  • 如果您需要快速运行许多计算量大的查询:
    • 您可能需要购买其他插槽以增加查询吞吐量。 请参阅https://cloud.google.com/bigquery/pricing#slots
    • 您可能希望对客户端进行速率限制,以防止计算量大的查询相互竞争。 考虑一次只运行几个查询。 您的总体吞吐量可能会更快。
  • 您正在使用批处理插入API。 这使得通过一个HTTP请求插入多个查询非常有效。 我发现HTTP连接很少是大规模数据分析引起延迟的原因,因此为了使客户端代码保持简单,我更喜欢使用常规的job.insert API并一次插入一个作业。 (当您要处理错误情况时,这变得尤为重要,因为使用批处理插入很难做到。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM