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 限制的主要内容,如果未能解决你的问题,请参考以下文章
Google Play Developer API - 超出配额