簡體   English   中英

Google 應用程序腳本 6 分鍾執行時間限制

[英]Google apps script 6 minute execution time limit

我正在通過存儲過程將數據從谷歌表復制到 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();
}

無法訪問要測試的 SQL 數據庫,並且在 Google AppScripts 中使用 JDBC 的經驗很少,我將不得不做出一些假設

我將假定for循環中執行時間的最大部分

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

如果是這樣,您是否嘗試將循環限制為在 6 分鍾時限內完成並將i最后一個值保存為用戶屬性 然后您可以多次運行該腳本,直到該腳本被標記為已完成(例如,另一個用戶屬性)。

例如:

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 循環之前進行測試。

不是一個完整的答案,但我希望它能讓你朝着正確的方向前進。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM