如何解决两个错误之一:内存不足或Javascript运行时意外退出
我没有找到其他任何可以真正解决此问题的主题。
正如标题所述,尝试运行以下代码时出现两个错误之一: (出于隐私目的,我已经编辑了项目ID,查询和文件ID。)
function runQuery() {
var projectId = 'projectId';
var request = {
query: 'SELECT * FROM [databaseName];'
};
var queryResults = BigQuery.Jobs.query(request,projectId);
var jobId = queryResults.jobReference.jobId;
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId,jobId);
}
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken) {
queryResults = BigQuery.Jobs.getQueryResults(projectId,jobId,{
pageToken: queryResults.pageToken
});
rows = rows.concat(queryResults.rows);
}
if (rows) {
var fileID = 'fileID';
var spreadsheet= SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheetByName("tabId");
sheet.clear();
// Append the headers.
var headers = queryResults.schema.fields.map(function(field) {
return field.name;
});
sheet.appendRow(headers);
// 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(5);
for (var j = 0; j < cols.length; j++) {
data[i][j] = cols[j].v;
}
}
sheet.getRange(2,1,rows.length,5).setValues(data);
Logger.log('Results spreadsheet created: %s',spreadsheet.getUrl());
} else {
Logger.log('No rows returned.');
}
}
错误1: JavaScript运行时意外退出。关闭
错误2: 内存不足错误。关闭
其他信息
数据库信息:
- 144625行
- 5列
- 文件中有1张纸
在撰写之前,我会清除工作表中的所有内容和格式:
if (rows) {
var fileID = 'fileID';
var spreadsheet= SpreadsheetApp.openById(fileID);
var sheet = spreadsheet.getSheetByName("tabId");
sheet.clear();
当我在清除工作表后记录行数和列数时:
- 1000行
- 26列
我想这是标准尺寸。
结果
代码运行后,我得到了错误,只有标题已经写在电子表格中。没有其他单元格已填充:
- 1行
- 5列
我该如何解决?如果您需要更多信息,请随时询问。
解决方法
在大型 XML 文件 (> 6MB) 上使用 getDescendants()
时,我遇到了非常相似的问题。由于 getDescendants()
是来自 XML Service 的方法,我不知道问题是由在将结果传递给运行时之前还是由它接收结果时引起的。
就我而言,我通过使用 getChildren(name,namespace)
而不是 getDescendants()
解决了这个问题,它返回了 ~6000 个元素。
在这种情况下,正如 TheMaster 所建议的,尝试限制 data
的大小,是通过在数据达到一定长度(即 5000)时将数据传递给电子表格,并清除 data
之后。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。