此问题可能是由于BigQuery与Apps Script之间的网络连接出现问题。为解决此问题,可以使用重试逻辑来确保插入作业成功。
以下是一个示例代码,可用于在Apps Script中自动重试BigQuery插入作业直到API成功为止。
function insertIntoBigQuery(data) {
var projectId = "YOUR_PROJECT_ID";
var datasetId = "YOUR_DATASET_ID";
var tableId = "YOUR_TABLE_ID";
var table = BigQuery.Tables.get(projectId, datasetId, tableId);
if (table.numRows >= 50000) {
throw "Maximum number of rows has been reached";
}
var schema = table.schema;
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
schema: schema,
writeDisposition: 'WRITE_APPEND'
}
}
};
job = BigQuery.Jobs.insert(job, projectId);
var timeoutMs = 60000;
var numRetries = 5;
var intervalMs = 500;
for (var i = 0; i < numRetries; i++) {
try {
var status = BigQuery.Jobs.get(projectId, job.jobReference.jobId).status;
if (status.errorResult) {
throw "Error inserting into BigQuery: " + JSON.stringify(status.errorResult);
}
Utilities.sleep(timeoutMs);
return job.jobReference.jobId;
}
catch (err) {
Logger.log("Error inserting into BigQuery: " + err);
if (i == numRetries - 1) {
throw "Error inserting into BigQuery: " + err;
}
Utilities.sleep(intervalMs);
}
}
}
此代码将尝试向项目中的数据集表中插入数据。如果表中的行数已达到最大值(50,000行),则会抛出一个异常。如果插入过程中出现错误,则会使用重试逻辑重复