【问题标题】:Exceeded maximum execution time on Google App script with Google Big Query使用 Google Big Query 在 Google App 脚本上超过最大执行时间
【发布时间】:2013-12-09 18:05:15
【问题描述】:

如何在下面的代码中延长执行时间。本质上,我使用 Google App 脚本从我们的大查询数据库中查询数据并将数据导出到 Google 电子表格。

以下是我的代码:

函数 Weekly_Metric(){

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = "Budget";
var sheet = ss.getSheetByName(sheetName);
ss.setActiveSheet(sheet);
var sql = ' bigqueryscript ';
var results = GSReport.runQueryAsync(sql);
var resultsValues = GSReport.parseBigQueryAPIResponse(results); 
sheet.clear();
ss.appendRow(["Label1", "Label2", "Label3"]);

 for ( var i = 0 ; i < resultsValues.length ; i++ ) {
  ss.appendRow(resultsValues[i]);
 }
}

【问题讨论】:

    标签: sql google-apps-script google-bigquery


    【解决方案1】:

    始终尽可能减少对 Google Apps 脚本服务的调用次数。

    在这种情况下,包含appendRow() 的循环可以替换为javascript 数组操作和对setValues() 的一次调用。

    ...
    sheet.clear();
    
    var data = [];
    data.push(["Label1", "Label2", "Label3"]);
    for ( var i = 0 ; i < resultsValues.length ; i++ ) {
      data.push(resultsValues[i]);
    }
    ss.getRange(1,1,data.length,data[0].length).setValues(data);
    ...
    

    或者,如果resultsValues 已经是一个行数组,您只需添加标签:

    ...
    sheet.clear();
    
    resultsValues.unshift(["Label1", "Label2", "Label3"]);
    ss.getRange(1,1,resultsValues.length,resultsValues[0].length).setValues(resultsValues);
    ...
    

    如果这不起作用,那么您应该查看 GSReport 对象的方法。

    【讨论】:

      【解决方案2】:

      这篇文章很好地回答了如何在 AppsScripts 中运行耗时超过 5 分钟的异步调用:

      Exceeded maximum execution time in Google Apps Script

      我想知道为什么调用 BigQuery 的时间超过 5 分钟?

      【讨论】:

      • 很明显,需要时间的不是对 BigQuery 的调用……而是循环中的电子表格调用。查看其他答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多