无法使用 Google App Script 将解压缩的 csv 上传到具有更大数据的 BigQuery

Posted

技术标签:

【中文标题】无法使用 Google App Script 将解压缩的 csv 上传到具有更大数据的 BigQuery【英文标题】:Can't use Google App Script to upload an unzipped csv into BigQuery with bigger size data 【发布时间】: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 你能把这个作为答案发布给社区吗? 【参考方案1】:

发布@Adventurous Leo 的答案以提高知名度

我想我刚刚意识到为什么会发生这种情况。这是我的配额,我只有 每个 URI 50MB,我将减小大小并进行批量上传。仍然 谢谢两位指路

【讨论】:

以上是关于无法使用 Google App Script 将解压缩的 csv 上传到具有更大数据的 BigQuery的主要内容,如果未能解决你的问题,请参考以下文章

Google App Script - 如何在 JDBC 查询中加入多个数据库

在Google App Script中使用导入的模块

设置使用 Google App Script 创建的新幻灯片的权限

如何在 Google App Script 中使用参数调用 MySQL 存储过程?

如何使用 Google App Script 从 Youtube 搜索中创建 RSS 提要?

Google App Script在doc中显示提示,但未使用电子表格权限