QueryResponse.getJobComplete() false 表示尚未完成或失败



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

谢谢

只要

getJobComplete()返回false,这意味着作业仍在执行。它既没有失败,也没有成功。只要作业未完成,就必须每隔几秒钟发出一次对jobs.list的调用。

一旦getJobComplete()返回true,作业就完成了,但你必须检查是否成功。为此,请检查getStatus().getErrorResult()是否返回null 。如果它没有返回null则意味着作业未成功。

API 对 jobs.query/jobs.getResults实际上是 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。请注意代码如何不断调用 getQueryResults,直到 queryResponse.getJobComplete(( 为 true,然后它通过进一步调用 getQueryResults(( 来连接分页令牌,直到读取整个表。

相关内容

最新更新