Error: Call to bigquery.jobs.get fails with error: Not found



我正在一个Google表单的AppsScript中执行以下代码,该表单正在将其数据上传到BigQuery…

var tableId = tableName
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
skipLeadingRows: 1,
allowQuotedNewlines:true,
quote: "'"
}
}
};
csv_blob = Utilities.newBlob(csv,"application/octet-stream");
job = BigQuery.Jobs.insert(job, projectId, csv_blob );
var jobId=job.jobReference.jobId;
var queryResults = BigQuery.Jobs.get(projectId, jobId);
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId);
}

上传成功,但是调用BigQuery.Jobs.get总是失败,并出现"API调用BigQuery.Jobs.get失败,error: Not found&;"如果我在BigQuery UI中查找作业,那么我从job. jobrereference .jobId调用返回的jobId是正确的。如果我在cloud.google.com/bigquery/docs/reference/rest/v2/jobs/get上自己尝试API调用,传入projictId、jobId和位置(us-west3),它会找到工作并返回它。任何想法为什么在我的代码调用失败?没有位置参数

所以,事实证明,除了projectId和jobId之外,BigQuery.Jobs.get还需要位置,即使没有位置参数。您可以通过执行以下操作来插入它…

var job = BigQuery.Jobs.get(projectId, jobId, {location: jobLocation});  

,您可以从您插入的作业中获得位置…

var jobLocation = job.jobReference.location;

这是我的固定代码…

var tableId = tableName
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
skipLeadingRows: 1,
allowQuotedNewlines:true,
quote: "'"
}
}
};
csv_blob = Utilities.newBlob(csv,"application/octet-stream");
//Copy the csv to BigQuery
job = BigQuery.Jobs.insert(job, projectId, csv_blob );
//Get the job details
var jobId=job.jobReference.jobId;
var jobLocation = job.jobReference.location;
//Give it a half second to complete
var sleepTimeMs = 500;
Utilities.sleep(sleepTimeMs);
//Get the job status (refresh the job var to get the latest)
var job = BigQuery.Jobs.get(projectId, jobId, {location: jobLocation});  
//Loop until its done
var jobstatusstate = job.status.state;
while(jobstatusstate!="DONE") {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
job = BigQuery.Jobs.get(projectId, jobId, {location: jobLocation});  
jobstatusstate = job.status.state;
}

最新更新