Google bigquery Google BigQuery getQueryResults为有效作业Id返回404错误
我已经用我自己的作业id成功创建了Google查询作业。并且能够再次使用工作id,昨天获得了成功的结果。 但是同样的工作我做得不好。 我在google bigquery UI中尝试了带有项目id的作业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:
{
"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小时,则需要为查询指定一个目标表。(见附件)。