2016-03-15 60 views
1

代码:如何在BigQuery中进行批处理操作poll_job?

batch.add(bigquery.jobs().insert(projectId=project_id, body=query_request_body)) 

一旦我做batch.execute(),是有办法,我可以这批请求对象如果批处理操作的所有工作已经完成,其将返回true上做一个poll_job()

回答

2

批处理允许您的客户端将多个API调用放入一个请求中。这使得您使用http通道的效率稍高一些。请注意,BigQuery本身没有提供“批处理”API:每个API调用都是独立处理的。

  • 概述配料:Batch Details
  • 一些细节,更好地描述了回应:如果你要检查“在一个请求的所有作业” Batch Request

鉴于此,那么你将需要构建批量调用jobs.get调用来检查所有工作。

如果您为每个插入的作业提供job_id引用,那么这将很容易构建,因为您拥有所有的job_ids。如果没有,您将不得不从所有那些jobs.insert调用中的批量回复中提取这些。 (您可能已经在检查批量回复以确保所有呼叫都成功,因此提取一点额外的数据对您来说可能是微不足道的。)

听起来您的最终目标听起来像是尽可能高效与您的http连接,所以不要忘记从连续批量的jobs.get调用中删除已完成的作业。

综上所述,有一种更简单的方法可以提高渠道的使用效率:如果您只想等待所有工作完成,那么您可以逐个轮询每个工作,直到完成。延迟将受最慢的工作限制,并且单个工作请求更易于管理。

+0

感谢您的回应!你的回答是有道理的 –