Google bigquery Google BigQuery getQueryResults为有效作业Id返回404错误

Google bigquery Google BigQuery getQueryResults为有效作业Id返回404错误,google-bigquery,Google Bigquery,我已经用我自己的作业id成功创建了Google查询作业。并且能够再次使用工作id,昨天获得了成功的结果。 但是同样的工作我做得不好。 我在google bigquery UI中尝试了带有项目id的作业id,但得到了与下面“404”相同的错误 { "error": { "errors": [ { "domain": "global", "reason": "notFound", "message": "Not Found: Table<projectId:

我已经用我自己的作业id成功创建了Google查询作业。并且能够再次使用工作id,昨天获得了成功的结果。 但是同样的工作我做得不好。 我在google bigquery UI中尝试了带有项目id的作业id,但得到了与下面“404”相同的错误

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "notFound",
    "message": "Not Found: Table<projectId:some random generated String.some random generated String>"
   }
  ],
  "code": 404,
  "message": "Not Found: Table <projectId:some random generated String.some random generated String>
 }
}
使用上述作业ID检索的结果:

String query = "SELECT count(*) AS TOTAL_RECORDS FROM :dataset.:tablename;"

    String expectedJobId = "someuniqueString";
    JobConfigurationQuery queryConfig = new JobConfigurationQuery()
                        .setQuery(query);
                queryConfig.setUseQueryCache(true);

                JobConfiguration config = new JobConfiguration()
                        .setQuery(queryConfig);

                JobReference jobReference = new JobReference();
                jobReference.setJobId(expectedJobId);
                jobReference.setProjectId(PROJECT_ID);

                Job job = new Job().setId(expectedJobId).setConfiguration(
                        config);
                job.setJobReference(jobReference);
                            job = bigqueryService.jobs()
                                    .insert(PROJECT_ID, job).execute();
GetQueryResults queryRequest = bigqueryService.jobs()
                    .getQueryResults(PROJECT_ID, expectedJobId);
            GetQueryResultsResponse queryResponse = queryRequest.execute();

您看到的错误不是查找作业的问题,而是查找结果表的问题。正如您所注意到的,
getQueryResults()
对于特定作业,最多只能工作24小时;之后,为存储结果而创建的表将过期并被清理

如果您发现这是在24小时内发生的,您可能需要检查以确保作业实际成功完成。您可以使用
bigqueryService.jobs.get()
查找作业状态


如果这没有帮助,如果您发送作业id,我们(BigQuery团队)可以在服务器日志中查找该作业的情况。

有时问题是数据集位置不正确。在我的代码中,我有一个配置,在执行查询时根据该配置设置数据集位置。我把位置搞砸了,开始出现这个错误。经过2个小时的调试,终于发现了问题


更正了数据集位置,工作正常。

您的请求是什么样子的?您可以显示创建作业请求的请求和响应吗?Jason,我已经添加了关于请求创建逻辑的更多详细信息。您还需要其他详细信息吗?我认为您无法指定作业ID。您提供的任何值都将被忽略。您不应该使用expectedJobId,而应该使用job.getId()--查看这是否有帮助,在大查询中将预期的作业id正确设置为作业id,并且可以正常工作一天以上。但在那之后它就不起作用了。job.getId()提供了相同的值。谢谢Jordan。在我的例子中,job Id可以正常工作24小时,之后只有我有这个问题。如果我对现有的工作Id使用下面的代码,我可以在接下来的24小时内再次得到结果,对吗?如果我的理解有误,请纠正我<代码>bigqueryService.jobs().get(项目ID,expectedJobId).execute()上述查询是否有任何输入?如果希望查询结果的可用时间超过24小时,则需要为查询指定一个目标表。(见附件)。