【发布时间】:2018-08-14 13:20:34
【问题描述】:
我使用平台将带有 CSV/ZIP 文件的报告自动发送到我的 Gmail,平台将根据大小决定发送哪种类型。我构建了这个 Google Apps 脚本来将此文件推送到 BigQuery。
我在较小的 zip 上尝试过这个(zip 像几百 KB,解压缩时是 25MB),它没有问题。但是,当它变得更大时(像 3MB 这样的压缩文件,解压缩时是 77MB),我在处理 Job.Load 时收到一条错误消息。想知道是否有人遇到过这个问题并愿意分享一些提示。谢谢。
对不起,我的用户界面上显示的错误消息是中文,所以我只是跳过将其附加到这个线程:(
代码如下:
function BQLoad() {
var projectId = 'quantum-feat-211902';
var datasetId = 'DBM_dataset01';
var tableId = 'test';
var thread = GmailApp.getInboxThreads(0,1)[0];
var message = thread.getMessages()[0];
var attachments = message.getAttachments()[0];
var firstThread = GmailApp.getInboxThreads(0,1)[0];
var messages = firstThread.getMessages();
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId,
},
skipLeadingRows: 1,
ignoreUnknownValues: true,
writeDisposition: "WRITE_TRUNCATE",
sourceFormat: 'CSV',
fieldDelimiter: ',',
allowJaggedRows: true,
encoding: "UTF-8",
maxBadRecords: 1000,
},
},
};
for (var i = 0; i < messages.length; i++) {
Logger.log(messages[i].getSubject());
}
Logger.log(attachments.getContentType());
if (attachments.getContentType() === "application/zip") {
var data = Utilities.unzip(attachments)[0];
}
else {
var data = attachments;
}
job = BigQuery.Jobs.insert(job, projectId, data);
Logger.log('Load job started. Check on the status of it here: ' +
'https://bigquery.cloud.google.com/jobs/%s', projectId);
}
【问题讨论】:
-
你能把错误信息翻译成英文吗?了解具体错误是什么可能会有很大帮助。作为一个有根据的猜测,当运行代码的服务器设置了时间限制或允许它们处理的数据的大小限制时,有时会发生这样的问题。大文件可能会导致脚本运行时间过长。
-
谢谢 Brian :) 错误消息是关于第 39 行的“找不到任何内容”的内容:job = BigQuery.Jobs.insert(job, projectId, data);不知道和数据有没有关系
-
@Adventurous Leo - 这是否仅适用于大 ZIP 文件和所有大 ZIP 文件或某些文件?您可以尝试使用大的 CSV 文件,以便我们了解问题出在哪里吗?我看到了关于从云端硬盘上传的documentation,但我想这不适合您?
-
我想我刚刚意识到为什么会发生这种情况。这是我的配额,我每个 URI 只有 50MB,我将减小大小并进行批量上传。还是谢谢你们两个给我指路。
-
@Adventurous Leo 你能把这个作为答案发布给社区吗?
标签: google-apps-script google-bigquery