【问题标题】:Google apps script 6 minute execution time limitGoogle Apps 脚本 6 分钟执行时间限制
【发布时间】:2016-12-23 18:38:28
【问题描述】:

我正在通过存储过程将数据从 google 表格复制到 mysql 表中。这张表有大约 3000 多条记录。在复制了大约 2000 条记录后,我达到了 6 分钟的执行时间限制。有没有办法解决这个 6 分钟的执行时间限制。

function myfunction() { 
  var colA;
  var colB; 
  var colC; 
  var colD;
  var colE;  

  var mysqldb = Jdbc.getConnection("jdbc:mysql;dbipaddress","user","pa$$word");
  var sql = mysqldb.createStatement();
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('sheet1'); 
  var data = sheet.getDataRange().getValues();  

  for (var i = 1; i < data.length; i++) {
  colA = data[i][0];
  colB = data[i][1]; 
  colC = data[i][2]; 
  colD = data[i][3]; 
  colE = data[i][4];  

  var query = "{call [dbo].[sp_copygsheets](?,?,?,?,?)}";
  sql = mysqldb.prepareCall(query);
  sql.setString(1, colA);
  sql.setString(2, colB); 
  sql.setString(3, colC); 
  sql.setString(4, colD);
  sql.setString(5, colE); 
  sql.executeUpdate();
  }

  sql.close();
  mysqldb.close();
}

【问题讨论】:

标签: mysql google-apps-script jdbc


【解决方案1】:

由于无法访问要测试的 SQL 数据库,并且几乎没有在 Google AppScripts 中使用 JDBC 的经验,我将不得不做出一些假设

我会假设for循环中执行时间的最大部分

for (var i = 1; i < data.length; i++) {
...
}

如果是这样,您是否尝试过将循环限制为在 6 分钟的时间限制内完成并将i 的最后一个值保存为user property?然后您可以多次运行该脚本,直到该脚本被标记为已完成(例如,另一个用户属性)。

例如比如:

var startVal = PropertiesService.getUserProperties().getProperty("lastLoop");
    for (var i = startVal; i < numLoops; i++) {
    ...
    }
var newProp = {myStartVal: startVal+numLoops};
PropertiesService.getUserProperties().setProperties(newProp);

然后将脚本设置为时间触发器并让它运行直到 numLoops 等于 data.length,这可以在执行 for 循环之前进行测试。

不是一个完整的答案,但我希望它能让你朝着正确的方向前进。

【讨论】:

  • 我想补充一点,我觉得这并不真正值得回答,但更适合作为简短评论,但声誉低于 50 我无法添加 cmets,所以为部分答案道歉。
猜你喜欢
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多