首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Google脚本将Google工作表中的行追加到大查询中的现有表中

使用Google脚本将Google工作表中的行追加到大查询中的现有表中
EN

Stack Overflow用户
提问于 2017-11-02 16:51:38
回答 1查看 731关注 0票数 2

我有一个Google表,我想从中选择一个单元格,并将它们作为行附加到一个已经存在于Big Query中的表中。我已经编写了下面的代码,运行时没有任何错误,但是当我在BQ中检查表时,它不会更新。

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

  var projectId = 'projectId'; 
  var datasetId = 'datasetId';
  var tableId = 'tableId';

  var fileId = 'fileId';
  var ss = SpreadsheetApp.openById(fileId);
  var sheet = ss.getSheets()[0];
  var range = sheet.getRange(21,2,sheet.getLastRow()-21,7);
  var values = range.getValues();
  var rowsCSV = values.join("\n");
  Logger.log(rowsCSV);

  function convertValuesToRows(rowsCSV) {
    var rows = [];  
    var headers = rowsCSV[0]; 


    for (var i = 1, numColumns = rowsCSV.length; i < numColumns; i++) {
      var row = BigQuery.newTableDataInsertAllRequestRows();
      row.json = rowsCSV[i].reduce(function(obj, value, index) {
        obj[headers[index]] = value;
        return obj
      }, {});
      rows.push(row);
    }; 
    return rows;
    }

  function bigqueryInsertData(rowsCSV, tableId) {
    var insertAllRequest = BigQuery.newTableDataInsertAllRequest();
    insertAllRequest.rows = convertValuesToRows(rowsCSV);     
    var response = BigQuery.Tabledata.insertAll(insertAllRequest, projectId, datasetId, tableId);
    if (response.insertErrors) {
      Logger.log(response.insertErrors);
    }
  }

}

我需要改变什么才能让它起作用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-03 09:29:22

将rowsCSV转换为blob允许我在bigqueryInsertData函数中使用getDataAsString()方法。我还手动命名了标题,以匹配BigQuery中表的列名。最后的代码如下所示,运行时没有出现错误,并成功地更新了BQ表。

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

      var projectId = 'production-1077'; 
      var datasetId = 'alex_test';
      var tableId = 'Total_Jobs_Reporting_Table';

      var fileId = 'fileId';
      var ss = SpreadsheetApp.openById(fileId);
      var sheet = ss.getSheets()[0];
      var range = sheet.getRange(21,2,sheet.getLastRow()-21,7);
      var values = range.getValues();
      var rowsCSV = values.join("\n");
      var data = Utilities.newBlob(rowsCSV, 'application/octet-stream'); 

      function convertValuesToRows(data) {
        var rows = [];  
        var headers = ["name1","name2","name3","name4","name5","name6","name7"] ; 


        for (var i = 1, numColumns = data.length; i < numColumns; i++) {
          var row = BigQuery.newTableDataInsertAllRequestRows();
          row.json = data[i].reduce(function(obj, value, index) {
            obj[headers[index]] = value;
            return obj
          }, {});
          rows.push(row);
        }; 
        return rows;
     }

     function bigqueryInsertData(data, tableId) {
       var insertAllRequest = BigQuery.newTableDataInsertAllRequest();
       insertAllRequest.rows = convertValuesToRows(data);     
       var response = BigQuery.Tabledata.insertAll(insertAllRequest, projectId, datasetId, tableId);
       if (response.insertErrors) {
         Logger.log(response.insertErrors);
       }
    }

    bigqueryInsertData(Utilities.parseCsv(data.getDataAsString()), tableId);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47080633

复制
相关文章

相似问题

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