使用Google Apps Script调用BigQuery报错:找不到指定Job
解决Google Apps Script调用BigQuery Jobs.getQueryResults时的"Not found: Job"错误
你的错误根源是在调用BigQuery.Jobs.getQueryResults时未传递与初始查询请求一致的location参数。当你在request中指定了特定region作为location,BigQuery会将查询任务创建在该区域内;如果后续请求不带location,BigQuery会默认去US区域查找任务,自然找不到目标job。
直接修改两处代码即可解决:
- 循环检查任务状态的
getQueryResults调用,添加location参数:
// 原错误代码 // queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId); // 修改后 queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {location: request.location});
- 确保分页请求的location参数与初始请求一致(你这里已配置,但需确认值的有效性)
完整修复后的核心代码片段:
const projectId = 'project-id'; const request = { query: 'SELECT * FROM DUMMY_TABLE;', location: "region", // 替换为实际有效区域,比如"us-central1" useLegacySql: false }; let queryResults = BigQuery.Jobs.query(request, projectId); let jobId = queryResults.jobReference.jobId; // 检查查询任务状态 let sleepTimeMs = 1000; while (!queryResults.jobComplete) { Utilities.sleep(sleepTimeMs); sleepTimeMs *= 2; // 带上与初始请求一致的location参数 queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {location: request.location}); } // 获取所有结果行 let rows = queryResults.rows; while (queryResults.pageToken) { queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, { pageToken: queryResults.pageToken, location: request.location }); rows = rows.concat(queryResults.rows); }
额外验证点:
- 确认
request.location是有效的BigQuery区域值(如"us-east1"、"europe-west1",不能是模糊的"region") - 确保脚本授权账号拥有该BigQuery项目的
BigQuery Job Viewer权限 - 检查
projectId与创建任务的项目ID完全一致
内容的提问来源于stack exchange,提问作者FatRah
相关产品推荐
相关产品推荐

