首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将Google Apps脚本中的CSV文件上传到BigQuery表-行中有恶意逗号

将Google Apps脚本中的CSV文件上传到BigQuery表-行中有恶意逗号
EN

Stack Overflow用户
提问于 2019-02-11 02:56:25
回答 2查看 924关注 0票数 0

大家好,

背景故事:我每天都有一份CSV文件中的报告通过电子邮件发送给我。我正在尝试用GAS创建一个脚本来下载Google Drive中的CSV文件,然后将其上传到一个BigQuery表中。GAS是我们唯一启用的脚本工具,所以我坚持使用它。我对JavaScript和BigQuery API都是新手。

代码:

代码语言:javascript
运行
复制
function testFunction() {

  var file = DriveApp.getFilesByName("my_csv_file.csv")
  var csv = file.next().getBlob().setContentType('application/octet-stream').getDataAsString();
  var csvData = Utilities.parseCsv(csv);

  // I need to do the following to get the yyyy-MM-dd format

  for (var i = 1; i < csvData.length; i++) {
    var csvdate = csvData[i][1];
    csvData[i][1] = csvdate.substring(6, 10) + "-" + csvdate.substring(3, 5) + "-" + csvdate.substring(0, 2);
    }

  var csvString = csvData.join("\n");  

 var blob = Utilities.newBlob(csvString, "text/csv")
 var data = blob.setContentType('application/octet-stream');

  var projectId = 'my_project_id';
  var datasetId = 'my_dataset';
  var tableId   = 'bigquery_table';

  var job = {
    configuration: {
      load: {
        destinationTable: {
          projectId: projectId,
          datasetId: datasetId,
          tableId: tableId
        },
        source_format: 'CSV',
        skipLeadingRows: 1,
        allowJaggedRows: 'TRUE',
        allow_quoted_newlines: 'TRUE',
      }
    }
  };
  job = BigQuery.Jobs.insert(job, projectId, data);

}

以及我得到的作业错误:

代码语言:javascript
运行
复制
Error encountered during job execution:
Error while reading data, error message: CSV table encountered too many errors, giving up. Rows: 1290; errors: 1. Please look into the errors[] collection for more details.
Failure details:
 - Error while reading data, error message: Too many values in row
   starting at position: 239165.
 - You are loading data without specifying data format, data will be
   treated as CSV format by default. If this is not what you mean,
   please specify data format by --source_format.

我不明白的是:我指定了source_format --我做错了吗?

我发现的问题是:某些行中的值太多,因为有太多的列。有太多的列,因为一些产品描述中有出血的逗号。原始的CSV文件将所有的单元格都封装在引号中-我想这是解决问题的好方法。问题是,我需要更改日期列的格式,以便BigQuery accept is as a date,通过这样做,我似乎删除了所有引号...

有什么建议可以帮我解决这个问题吗?

EN

回答 2

Stack Overflow用户

发布于 2019-02-11 04:22:03

看来我找到了一个解决方案。额外的逗号只出现在一列中,所以我使用了这个循环:

代码语言:javascript
运行
复制
  for (var i = 1; i < csvData.length; i++) {
    var csvdate = csvData[i][1];
    csvData[i][1] = csvdate.substring(6, 10) + "-" + csvdate.substring(3, 5) + "-" + csvdate.substring(0, 2);
    }

要添加附加步骤,请执行以下操作:

代码语言:javascript
运行
复制
  for (var i = 1; i < csvData.length; i++) {
    var csvdate = csvData[i][1];
    csvData[i][1] = csvdate.substring(6, 10) + "-" + csvdate.substring(3, 5) + "-" + csvdate.substring(0, 2);
    var csvdesc = csvData[i][4];
    csvData[i][4] = csvdesc.replace(/([,])+/g, "") ;
    }

这将从列中删除所有逗号。呼!

票数 1
EN

Stack Overflow用户

发布于 2019-02-11 03:18:52

原始CSV文件将所有单元格封装在引号中

然后,做同样的事情。

代码语言:javascript
运行
复制
var csvString = csvData.map(function (row){
    return '"' + row.join('","') + '"';
}).join('\n')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54619870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档