从SQL上传40k +行到Google表格

时间:2015-10-08 21:06:09

标签: google-apps-script google-sheets

我正在尝试从SQL填充到Google Sheets一个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 = 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。

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

假设超时发生在数据库端,那么批处理将有所帮助。不是在单个查询中获取所有行,而是获得前几百或几千。完成查询后,关闭语句并使用新参数重新打开它以获得接下来的几百或几千。您可以为所有查询保持相同的连接。

具体如何根据您的SQL数据库进行数据库分页。

另一种选择是将数据缓存在内存中,关闭数据库连接,然后更新电子表格。

答案 1 :(得分:0)

我从未在应用程序脚本上使用过jdbc,但是每个循环的脚本都会将数据添加到工作表中,这非常耗时。最好的方法是构建一个数组,然后在推送到数组中的所有数据后推送到电子表格。

 $(function () {
    $('#datetimepicker3').datetimepicker({
        format: 'HH:mm',
        onSelect: function(){
            checkTime();
        }
    });
    $('#datetimepicker5').datetimepicker({
        format: 'HH:mm',
        onSelect: function(){
            checkTime();
        }
    });


});

这将使您在脚本中节省大量时间,但不确定40 000行是否适合6分钟。不知道jdbc服务的性能。

斯特凡