【问题标题】:Google App Script: Javascript runtime exited unexpectedlyGoogle App 脚本:Javascript 运行时意外退出
【发布时间】:2020-04-16 17:15:24
【问题描述】:

我编写了一个应用脚本,它将与 bigQuery API 交互并获取 bigQuery 结果。

API 被命中大约 60-70 次。在此过程中,有时我会收到以下错误消息:

“JavaScript 运行时意外退出”

有人可以帮我吗?

如果您需要任何其他信息,请告诉我

function fetchTables() {
  var timezone = "GMT+" + new Date().getTimezoneOffset()/60;
  var date = Utilities.formatDate(new Date(), timezone, "yyyy-MM-dd HH:mm");
  Logger.log(date);
  var sheet = SpreadsheetApp.getActive().getSheetByName('Tables');
  var value = sheet.getRange('A1').getValue();

  var projectId = 'corpbi-dev';

  var request = {
    query: 'select table_id from [corpbi-dev:' + value + '.__TABLES__]'
  };
  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;

   var rows = queryResults.rows;

  if (rows) {
    // Append the results.
    var data = new Array(rows.length);
    for (var i = 0; i < rows.length; i++) {
      var cols = rows[i].f;
      data[i] = new Array(cols.length);
      for (var j = 0; j < cols.length; j++) {
        data[i][j] = cols[j].v;
      }
    }
  }

  var queries = [];
  var totalbytes = [];
  var timelapsed = [];
  var rowcount = [];
  var jobcode = [];

  var finalSheet = SpreadsheetApp.getActive().getSheetByName('Final Metrics');

  for(var i=1; i<=data.length; i++) {
  var sql = "SELECT stage_loading_query FROM (SELECT stage_loading_query, job_start_time FROM [corpbi-dev:etl_log.job_details] WHERE target_table LIKE '%"+ value + "." + data[i-1]+"%' " +
    "GROUP BY 1, 2 ORDER BY 2 desc) LIMIT 1"

  var request1 = {
    query: sql
  };
  var queryResults1 = BigQuery.Jobs.query(request1, projectId);
  var sql1 = queryResults1.rows;
    //Logger.log(sql1);
 //   break;

  if (sql1) {
    // Append the results.
    var data1 = new Array(sql1.length);
    for (var k = 0; k < sql1.length; k++) {
      var cols = sql1[k].f;
      data1[k] = new Array(cols.length);
      for (var j = 0; j < cols.length; j++) {
        data1[k][j] = cols[j].v;
      }
    }
  }
   queries.push(data1);
     
  }
  //Logger.log(queries.length);
  finalSheet.getRange(2, 1, queries.length).setValues(queries);
//  queries = finalSheet.getRange(2, 1, finalSheet.getLastRow()-1).getValues();
  var endtime = (new Date()).getTime();
  Logger.log(endtime);


  for(var i=1; i<=queries.length; i++) {
    var sqlstmt = queries[i-1];


    try{
      var request2 = {
    query: sqlstmt,
    useLegacySql: true
  };
    var sleepTimeMs = 50000;
  var queryResults2 = BigQuery.Jobs.query(request2, projectId);
       var jobId1 = queryResults2.jobReference.jobId;
      while (!queryResults2.jobComplete) {
        Utilities.sleep(sleepTimeMs);
        sleepTimeMs *= 2;
        queryResults2 = BigQuery.Jobs.getQueryResults(projectId, jobId1);
        //continue;
      }

  var queryDetails = BigQuery.Jobs.get(projectId, jobId1);
  totalbytes.push(queryDetails.statistics.totalBytesProcessed);
  timelapsed.push(queryDetails.statistics.totalSlotMs);
  rowcount.push(queryResults2.totalRows);
}
    catch(e){
      try{
      var request2 = {
    query: sqlstmt,
    useLegacySql: false
  };

    var sleepTimeMs = 50000;
    var queryResults2 = BigQuery.Jobs.query(request2, projectId);
    var jobId1 = queryResults2.jobReference.jobId;
    while(!queryResults2.jobComplete) {
          Utilities.sleep(sleepTimeMs);
        sleepTimeMs *= 2;
        queryResults2 = BigQuery.Jobs.getQueryResults(projectId, jobId1);
       // continue;
      }

  var queryDetails = BigQuery.Jobs.get(projectId, jobId1);
  totalbytes.push(queryDetails.statistics.totalBytesProcessed);
  timelapsed.push(queryDetails.statistics.totalSlotMs);
  rowcount.push(queryResults2.totalRows);
}
      catch(e){
      Logger.log(e);
    }
      Logger.log(e);
    }
  finalSheet.getRange(i+1, 2,).setValue((totalbytes[i-1]/1048576).toFixed(2) + 'MB');
  finalSheet.getRange(i+1, 3,).setValue((timelapsed[i-1]/1000).toFixed(2) + 's');
  finalSheet.getRange(i+1, 4,).setValue((rowcount[i-1]));

  }

}


【问题讨论】:

  • 你能分享你的javascript代码吗
  • 您好 sravan,请打开您的脚本并点击 View&gt;Executions。在那里,您应该看到所有脚本执行的报告。请务必选择失败的日志之一,并附上与执行相关的日志,以便我们检查它们。
  • 另外,请问您使用的是什么版本的GAS?如果您在 Apps 脚本编辑器中打开 View&gt;Manifest File,您会看到 runtimeVersion 标记吗?它说什么?能否也分享一下代码?
  • 您好 Carlessgg97,这是错误日志“2019 年 12 月 26 日下午 6:05:36 错误 JavaScript 运行时意外退出。”运行时版本是 V8
  • 嘿Sravan,我发布的答案对您有用吗?我很想知道你是如何处理你最初提出的问题的。干杯!

标签: google-apps-script google-bigquery


【解决方案1】:

众所周知,Google Apps 脚本的 V8 运行时处于 Alpha 阶段,这意味着您可能会遇到一些错误/错误。

要使用稳定的 GAS 版本,您只需将脚本清单中的 runtimeVersion 值从 V8 更改为 STABLE

【讨论】:

  • 我是不幸的用户之一,他们刚刚在 Google 应用程序脚本项目中投入了大量工作,只是为了让这条消息开始出现。我的调试器也停止工作。我无法切换到以前的运行时,因为这也会破坏脚本。我所有的声明都是'let'而不是'var'。我真的希望他们尽快使 ES6 版本稳定...
  • 当我输入 STABLE 而不是 V8 时,出现错误
猜你喜欢
  • 2015-12-18
  • 2015-08-13
  • 1970-01-01
  • 2012-07-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-21
  • 2016-12-22
  • 1970-01-01
相关资源
最近更新 更多