默认情况下(6分钟)将Google应用脚本超时延长至10分钟

时间:2017-09-21 06:16:43

标签: javascript google-apps-script google-cloud-sql

当我在6分钟后运行脚本...

  

[消息:语句因超时或客户请求而被取消(第140行,文件"代码")解除]并停止编译。我需要插入2000行,但它只插入1200行。我该如何解决这个问题?

CODE:

function writeManyRecords() {
  var conn = Jdbc.getConnection(dbUrl, user, userPwd);
  conn.setAutoCommit(false);

  var start = new Date();
  var stmt = conn.prepareStatement('INSERT INTO test_table'
      + '(Item, Quantity, Price, total_price) values (?, ?, ?, ?)');


var values = SpreadsheetApp.getActiveSheet().getDataRange().getValues();

  for(n=1;n<values.length;++n){
    var cell_1 = values[n][0] ;    
    var cell_2 = values[n][1] ; 
    var cell_3 = values[n][2] ;
    var cell_4 = values[n][3] ;

    stmt.setString(1, cell_1);
    stmt.setString(2, cell_2);
    stmt.setString(3, cell_3);
    stmt.setString(4, cell_4);
    stmt.addBatch();
  }

  var batch = stmt.executeBatch();   

// 该行:由于超时或客户请求而取消声明(第140行,文件&#34;代码&#34;)

  conn.commit();
  conn.close();

  var end = new Date();
  Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
}

1 个答案:

答案 0 :(得分:0)

这是一个简单的实用程序函数,可用于批量处理数据:

function isTimeUp_(starttime) {
  var now = new Date();
  return now.getTime() - starttime.getTime() > 270000; // 4.5 minutes
}

function myLongFunction() {
  var starttime = new Date();
  for(var i=0; i<data.length; i++) {
    if (isTimeUp_(starttime )) {
      Logger.log("Time up, finished on row " + i);
      break;
    }
    // rest of the loop if false
  }
}

检查短于6分钟的时间可确保您不会超时。将其与触发器配对以自动重启功能并获取数据处理。