BigQueryException:超出 API 限制

Posted

技术标签:

【中文标题】BigQueryException:超出 API 限制【英文标题】:BigQueryException: API limit exceeded 【发布时间】:2018-11-13 00:38:04 【问题描述】:

我正在使用 Bigquery Java API 通过 WriteDisposition WRITE_APPEND 同时运行约 1000 个复制作业(使用 scala.concurrent.Future),但我得到了

com.google.cloud.bigquery.BigQueryException: API limit exceeded: Unable to return a row that exceeds the API limits. To retrieve the row, export the table 

我以为是并发太多导致的,于是尝试使用Monix的Task将并行度限制在20以内:

def execute(queries: List[Query]): Future[Seq[Boolean]] = 
    val tasks: Iterator[Task[List[Boolean]]] = queries.map(q => BqApi.copyTable(q, destinationTable))
      .sliding(20, 20)
      .map(Task.gather(_))

    val results: Task[List[Boolean]] = Task.sequence(tasks)
      .map(_.flatten.toList)

    results.runAsync
  

其中 BqApi.copyTable 执行查询并将结果复制到目标表,然后返回一个 Task[Boolean]。

同样的异常仍然发生。

但如果我将 WriteDisposition 更改为 WRITE_TRUNCATE,异常就会消失。

谁能帮助我了解幕后发生的事情?为什么 Bigquery API 会有这样的行为?

【问题讨论】:

【参考方案1】:

当查询超出最大响应大小时会遇到此消息。由于复制作业使用jobs.insert,因此您可能遇到了查询作业限制中的maximum row size。我建议在其issue tracker 上填写 BigQuery 错误,以正确描述您在 Java API 方面的行为。

【讨论】:

感谢您的回复,但如果我将 WriteDisposition 设置为 WRITE_TRUNCATE,则该异常永远不会出现,因此“超过最大行大小”假设可能无效,因为两种情况下的查询部分都是相同的. 由于 WRITE_TRUNCATE 覆盖了表数据并且您没有通过使用它来获得 API 限制消息,所以我会建议 fill an issue 以便 BigQuery 团队可以审查此行为。

以上是关于BigQueryException:超出 API 限制的主要内容,如果未能解决你的问题,请参考以下文章

录制超出语言 API 的 wav 文件

进行预览时出现 Bigquery API 限制超出错误

Google Play Developer API - 超出配额

谷歌驱动 API 超出用户速率限制

请求 gmail-api 时出现 HttpError 429:超出用户速率限制

Google Map 中的“您已超出此 API 的请求配额”[重复]