Google BigQuery getQueryResults 为有效的作业 ID 返回 404 错误
Posted
技术标签:
【中文标题】Google BigQuery getQueryResults 为有效的作业 ID 返回 404 错误【英文标题】:Google BigQuery getQueryResults returning 404 Error for valid Job Id 【发布时间】:2014-01-27 12:36:39 【问题描述】:我已经使用自己的作业 ID 成功创建了 Google 查询作业。并且能够再次使用作业ID并在昨天取得了成功的结果。 但同样的工作 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 以永久工作时需要任何特定配置?
我正在使用 Google Bigquery 的 Java API 来执行上述实现。找到下面使用的逻辑: 查询作业创建逻辑:
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();
使用上述 JobId 检索到的结果:
GetQueryResults queryRequest = bigqueryService.jobs()
.getQueryResults(PROJECT_ID, expectedJobId);
GetQueryResultsResponse queryResponse = queryRequest.execute();
【问题讨论】:
您的请求是什么样的?您能否显示创建作业的请求和响应? Jason,我添加了有关请求创建逻辑的更多详细信息。您还想要其他详细信息吗? 我认为您无法指定作业 ID。您提供的任何值都将被忽略。而不是使用 expectedJobId 你应该使用 job.getId() - 看看是否有帮助 Jason,预期的作业 ID 已正确设置为大查询中的作业 ID,并且可以正常工作超过一天。但在那之后它就不起作用了。并且 job.getId() 提供相同的值。 【参考方案1】:您看到的错误不是查找作业的问题,而是查找结果表的问题。正如您所注意到的,对于特定工作,getQueryResults()
最多只能工作 24 小时;之后,为存储结果而创建的表将过期并被清理。
如果您发现这发生在 24 小时窗口内,您可能需要检查以确保作业确实成功完成。您可以使用bigqueryService.jobs.get()
查看工作状态。
如果这没有帮助,如果您发送作业 ID,我们(BigQuery 团队)可以在服务器日志中查找该作业的情况。
【讨论】:
感谢 Jordan。就我而言,作业 ID 可以正常工作 24 小时,之后只有我遇到了这个问题。如果我将以下代码用于现有的 Job Id,我可以在接下来的 24 小时内再次获得结果,对吗?如果我的理解有误,请纠正我。bigqueryService.jobs().get(PROJECT_ID, expectedJobId) .execute();
上述查询有输入吗?
如果您希望查询结果的可用时间超过 24 小时,您需要为查询指定目标表。 (见***.com/questions/14622526/…)。【参考方案2】:
有时问题是数据集位置不正确。在我的代码中,我有一个配置,我在执行查询时根据该配置设置数据集位置。我搞砸了位置并开始收到此错误。经过2小时的调试终于找到了问题。
更正了数据集的位置,它工作正常。
【讨论】:
以上是关于Google BigQuery getQueryResults 为有效的作业 ID 返回 404 错误的主要内容,如果未能解决你的问题,请参考以下文章
com.google.cloud.bigquery.BigQueryException:读取超时
将表从 google bigquery 导出到 google 存储
Google BigQuery 的 Google App Engine 授权
使用命令行将数据从 BigQuery 加载到 Google 表格中