Google apps script 上传40k+;从SQL到Google表的行
我正在尝试从SQL填充到GoogleSheets一个40k行的记录集。不幸的是,脚本继续超过允许的最大时间(6分钟?)。以下是使用的代码:Google apps script 上传40k+;从SQL到Google表的行,google-apps-script,google-sheets,Google Apps Script,Google Sheets,我正在尝试从SQL填充到GoogleSheets一个40k行的记录集。不幸的是,脚本继续超过允许的最大时间(6分钟?)。以下是使用的代码: var qry = "select custid from customers "; var con = Jdbc.getConnection(connection,user,pw); var stmt = con.createStatement(); var rs = stmt.executeQuery(qry); dataRange
var qry = "select custid from customers ";
var con = Jdbc.getConnection(connection,user,pw);
var stmt = con.createStatement();
var rs = stmt.executeQuery(qry);
dataRange = sheet.getRange("a2")
while(rs.next()) {
dataRange.setValue(rs.getString(1));
dataRange = dataRange.offset(1,0);
}
rs.close();
stmt.close();
con.close();
有没有更有效的方法?Excel中是否有类似于copyFromRecordset的功能?(此示例代码仅显示一个列值。添加到查询中的列越多,返回的行就越少。)
如果网络速度是一个重要因素,那么我们的连接是50mb下行/10mb上行
提前感谢您的帮助 假设超时发生在数据库端,那么批处理将有所帮助。不要在单个查询中获取所有行,而是获取前几百行或几千行。完成查询后,关闭语句并使用新参数重新打开它,以获取下一个几百或几千个参数。您可以为所有查询保持相同的连接 具体如何进行数据库分页取决于您的SQL数据库是什么
另一个选项是将数据缓存在内存中,关闭数据库连接,然后更新电子表格。我从未在应用程序脚本中使用jdbc,但您的每个循环脚本都会将数据添加到工作表中,这非常耗时。最好的方法是构建一个数组,然后将数组中的所有数据推送到电子表格中
var qry = "select custid from customers ";
var con = Jdbc.getConnection(connection,user,pw);
var stmt = con.createStatement();
var rs = stmt.executeQuery(qry);
dataRange = sheet.getRange("a2")
var tab = [];
while(rs.next()) {
tab.push([rs.getString(1)]);
//dataRange = dataRange.offset(1,0);
}
sheet.getRange(1, 2, tab.length, tab[0].length).setValues(tab);
rs.close();
stmt.close();
con.close();
这将使您在脚本中节省大量时间,但不确定40000行是否适合这6分钟。不知道jdbc服务的性能
圣菲那太好了!该脚本现在运行约14-16秒!如何修改它来处理多个列?我发现它可以工作:tab.push([rs.getString(1),rs.getString(2),rs.getString(3),rs.getString(4),rs.getString(5),rs.getString(6)];确切的答案是:-)现在速度真的快了。不确定节省的时间是否会如此之高。。。