QueryResponse.getJobComplete()false表示不是YET完成还是失败?

时间:2014-12-12 21:16:50

标签: google-bigquery

当getJobComplete()返回false时,试图弄清楚要做什么。我认为这意味着工作失败所以我应该继续并重新提交,但需要确认而不是假设!

谢谢

2 个答案:

答案 0 :(得分:2)

只要getJobComplete()返回false,这意味着作业仍在执行。既没有失败也没有成功。只要作业没有完成,您必须每隔几秒钟向jobs.list发出另一个电话。

getJobComplete()返回true后,作业结束,但您必须检查是否成功。为此,请检查getStatus().getErrorResult()是否返回null。如果它没有返回null,这意味着工作没有成功。

答案 1 :(得分:1)

api pair jobs.query / jobs.getQueryResults实际上是jobs.insert / jobs.get / tabledata.list的包装。

在这两种情况下,您都会启动查询作业,等待它完成,然后从查询的输出表中读取结果。查询(和所有作业)运行异步并且可能需要时间,因此您需要在轮询循环中等待它们完成。

jobs.query / jobs.getQueryResults为您提供的是:(1)服务器端等待稍快检查作业完成,以及(2)在作业完成时返回查询结果的第一页。

jobs.insert / jobs.get / tabledata.list为您提供:(1)与所有类型的作业交互的一致方式,以及(2)区分api请求中的错误和错误的能力你的查询工作。如果要重试由于临时5xx错误而失败的api调用,使用jobs.get执行此操作是安全的。但是在调用jobs.getQueryResults时需要注意,因为作业中的错误会作为错误返回给api调用。

您可以在这里找到一个在while循环中使用jobs.query / jobs.getQueryResults的Java示例:https://cloud.google.com/bigquery/querying-data#syncqueries。注意代码如何在queryResponse.getJobComplete()为真之前一直调用getQueryResults,然后通过进一步调用getQueryResults()继续连接分页标记,直到读完整个表。