【发布时间】:2021-12-29 02:38:33
【问题描述】:
我的 Google Sheets Apps 脚本一直超时 - 它从 MySQL 数据库中进行简单读取并加载数据,它查询一个仅托管 150 行的单个持久表,因此它没有理由超时。
我的脚本如下所示:
var server = 'IP';
var port = PORT;
var dbName = 'DB';
var username = 'UN';
var password = 'PW';
var url = 'jdbc:mysql://'+server+':'+port+'/'+dbName;
function readData() {
var conn = Jdbc.getConnection(url, username, password);
var stmt = conn.createStatement();
var results = stmt.executeQuery('SELECT * FROM db.table');
var metaData=results.getMetaData();
var numCols = metaData.getColumnCount();
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('SheetName');
sheet.clearContents();
var arr=[];
for (var col = 0; col < numCols; col++) {
arr.push(metaData.getColumnName(col + 1));
}
sheet.appendRow(arr);
while (results.next()) {
arr=[];
for (var col = 0; col < numCols; col++) {
arr.push(results.getString(col + 1));
}
sheet.appendRow(arr);
}
results.close();
stmt.close();
/*sheet.autoResizeColumns(1, numCols+1);*/
}
/*ScriptApp.newTrigger('readData')
.timeBased()
.everyHours(2)
.create();*/
有什么办法可以更好地处理导入以加快导入速度,正如我所说,数据被持久化到数据库上的一个表中,该表只有大约 150 行和 10-15 列,所以数据是小型且可从 DB GUI 即时查询
【问题讨论】:
-
使用
setValues()而不是appendRow()。还可以尝试console.time()找出导致更多时间的脚本部分。 -
@TheMaster - 会看看这个!谢谢!
标签: google-apps-script google-sheets jdbc