Google App 脚本:Javascript 运行时意外退出

2024-02-23

我编写了一个应用程序脚本,它将与 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]));

  }

}



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

为了使用稳定的GAS版本,您只需更改runtimeVersion脚本清单中的值来自V8 to STABLE.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Google App 脚本:Javascript 运行时意外退出 的相关文章

  • Google Add-on 在有限模式应用脚本中添加菜单项

    我们在新的谷歌应用程序脚本添加商店中发布了一个插件 但在除安装的初始电子表格之外的任何电子表格中使用该插件时 权限似乎无法正常工作 我遇到一个问题 当创建新电子表格并且用户从 管理加载项 菜单中选择 使用此加载项 时 我们的菜单项不会填充
  • 在 Google Sheet 中打印每个 ID 的多个数据

    In this 电子表格 https docs google com spreadsheets d 1vHHLrLdQBRgTliO ZFmTUSTdkkWla8Lf982lG0MwJ0M edit usp sharing 我有一张名为表格
  • Google BigQuery Python 客户端使用错误的凭据

    当我尝试在 BigQuery 中查询表时收到 未授权 错误 我已经设置 os environ GOOGLE APPLICATION CREDENTIALS
  • 如何让 Google Apps 脚本进行 SHA-256 加密?

    我需要使用文本输入 1 轮 十六进制输出 SHA 256 加密来加密字符串 这应该是一个长度为 64 的字符串 我在 Google Apps 脚本文档中尝试过的每个 SHA 256 加密模块都会返回一组数字 例如 function SHA2
  • 查询文本指定 use_legacy_sql:false,而 API 选项指定:true

    我将 standardSQL 与 bigrquery 一起使用 library bigrquery project lt sql lt standardSQL SELECT result lt query exec sql project
  • 选择列的最后一个值

    我有一个电子表格 G 列中有一些值 有些单元格之间是空的 我需要将该列中的最后一个值获取到另一个单元格中 就像是 LAST G2 G9999 除了那个LAST不是一个函数 类似的答案卡里加里的回答 https stackoverflow c
  • 如何在公式中的 & 之间添加换行符以生成 QR URL

    我正在谷歌表格中创建一个电子表格 用于跟踪财产房间的库存 我使用二维码作为标签 将其放置在房产上 并将与该特定房产的相关信息相关联 我正在使用以下代码 image https chart googleapis com chart chs 2
  • 从哪里获取 Google Bigquery 使用信息(主要是处理后的数据)

    我知道 BigQuery 每月免费提供第一批 已处理的 1 TB 数据 但我不知道在仪表板上的何处查看我的每月使用情况 我曾经能够 恢复 到包含信息的旧仪表板 但在过去的几周内 旧仪表板 无法访问 在项目的 Google Cloud Con
  • Google BigQuery 与 PHP 集成

    我需要帮助将 google bigquery 代码集成到 PHP 中 所以我可以从 php 代码本身执行查询和其他类型的操作 需要您的帮助并建议我一些工作示例链接 提前致谢 这是一段代码 正确地创建一个Google Client using
  • 列出 Google 云端硬盘上特定演示文稿/文档的所有共享用户

    我们需要一份完整的列表 列出已获得 Google 云端硬盘上特定演示文稿 文档的 共享 查看权限的人员 我们有屏幕截图 但可能还不够 我们如何以编程方式检索这些信息 附加到 a 的属性File对象包括三个与用户相关的项目 Owner 一个单
  • 我正在尝试将变量从 Google 脚本传递到 HtmlOutputFromFile

    我正在尝试创建一个带有下拉列表的输入框 其中该列表基于从电子表格中提取的二维数组 到目前为止 我的研究告诉我 如果我将 HtmlService createHtmlOutputFromFile 存储在一个变量中 我就可以 设置该变量的属性
  • 如何从 HTML 文件输入获取文件并将其作为 Google Apps 脚本中电子邮件的附件发送?

    此 HTML 代码使用 Google Script 的 HTML 类服务获取文件输入 见下文 我想获取输入字段的值 文件 发送到我的 gs 文件并将其作为电子邮件的附件发送 从输入字段获取值只会返回文件的目录 这没有任何帮助 因为 Goog
  • 使用 Apache Beam 的 Dataflow 批量加载的性能问题

    我正在对数据流批量加载进行性能基准测试 发现与 Bigquery 命令行工具上的相同负载相比 加载速度太慢 文件大小约为 20 MB 包含数百万条记录 我尝试了不同的机器类型并获得了最佳的负载性能n1 highmem 4加载目标 BQ 表的
  • 电子表格的 Google 脚本(If 语句)

    我希望有人能帮助我解决这个问题 我是编码新手 我有一个谷歌电子表格 其中有一个可以推送电子邮件的脚本 我试图让脚本忽略脚本已发送电子邮件的行 function onOpen var ui SpreadsheetApp getUi Or Do
  • 通过嵌入式 Google Sheet 上的按钮激活脚本

    我正在尝试嵌入一个 Google 电子表格 其中包含一个我希望用户能够激活的脚本 我不希望他们能够编辑页面上的任何内容 我想我可以这样做 共享工作表并设置编辑权限 限制在我想要共享的一张纸上进行编辑 图像位于单元格上方 所以我认为这会阻止人
  • 复制带有内嵌图像的表格

    我正在尝试将 GDoc 的内容复制到另一个 GDoc 中 这对于所有不同的元素类型都非常有效 包括一个表 枚举DocumentApp ElementType TABLE 但是 如果表包含内联图像 EnumDocumentApp Elemen
  • javascript 对象是否像 Ruby 一样“开放”?

    在 Ruby 中 我可以使用与声明自己的语法相同的语法来添加和修改任何类 对象或方法的功能 因为 Ruby 有 开放类 JavaScript 是这样的吗 举个例子 就我而言 我想更改 Google Apps 脚本处理 URL 对象的方式 以
  • 列出文件夹中的所有文件,包括子文件夹中的文件

    我正在尝试创建一个 Google Apps 脚本 该脚本将允许用户获取文件夹内的所有文件 包括连接到主文件夹的子文件夹内的文件 请注意 在我的代码中 我是提供folderid的人 这将是主文件夹 我已设法从文件夹中获取所有文件 但我还希望提
  • 是否可以统计 JSON 列中每个键出现的次数?

    我有一个 BigQuery 表 其中有一列 其中包含 JSON 我想输出每个键在列中出现的次数 然后按计数降序排序 与所有键关联的值是1 每个对象都有已知 有限数量的键 但我宁愿不依赖它 以防最大的对象发生变化 总体而言 键的数量是已知 有
  • Python BigQuery 存储。并行读取多个流

    我有以下玩具代码 import pandas as pd from google cloud import bigquery storage v1beta1 import os import google auth os environ G

随机推荐