Google bigquery Bigquery:为什么设置作业id不起作用?

Google bigquery Bigquery:为什么设置作业id不起作用?,google-bigquery,Google Bigquery,当我们处理查询/加载作业时,有时会遇到SocketReadTimeOut,这是推荐的 我们希望自己设置作业id,以便在这种情况下检查作业状态,并确保没有提交重复作业以使数据无效。但它并不是每次Bigquery都会生成一个新的作业id。例如,如下所示: ... job.setConfiguration(config); job.setId("job_wRGTy7WaCKKcTdlE-nDWGDTZVI4"); Bigquery.Jobs.Insert insert = sBIGQUERY.job

当我们处理查询/加载作业时,有时会遇到SocketReadTimeOut,这是推荐的
我们希望自己设置作业id,以便在这种情况下检查作业状态,并确保没有提交重复作业以使数据无效。但它并不是每次Bigquery都会生成一个新的作业id。例如,如下所示:

... 
job.setConfiguration(config);
job.setId("job_wRGTy7WaCKKcTdlE-nDWGDTZVI4");
Bigquery.Jobs.Insert insert = sBIGQUERY.jobs().insert(mProjectId, job,content);
JobReference jobRef = insert.execute().getJobReference();
System.out.println(jobRef.getJobId());
最后一行的打印输出不是“job_wRGTy7WaCKKcTdlE-nDWGDTZVI4”,而是“job_CnuEOr4IEKHjLls-U1UDSBS0K-4”。为什么?如何正确设置作业id?

该“id”是一个仅输出的字段,是REST api要求的产物(“所有对象都应具有唯一的id”。作业id仅在项目中是唯一的,因此对象id不等于作业id)


我相信您想要做的是
job.setJobReference(new JobReference().setJobId(…)
而不是
job.setId()

,但在提交之前,我实际上从job.getJobReference()得到了空值。我尝试jobRef=newjobreference(),jobRef.setJobId(..),job.setJobReference(jobRef),然后提交该作业,它就工作了。