将新的Google表格数据附加到BigQuery表中

时间:2017-05-09 12:25:31

标签: javascript google-apps-script google-bigquery

所以我对所有这些都很陌生,包括BigQuery和AppScript(一般编码......),而且我正在学习,所以也许我的一些问题可能看起来很愚蠢。请听我说。

我创建了一个脚本,可以从我的一个BigQuery表中将10个最新数据点加载到Google表格文档中。现在,当我手动将新数据点添加到此表的底部时,我希望运行一个加载脚本,将新数据上传回BigQuery,并将其附加到原始表中。我在某地读到,只要插入一个新表,如果提到的表已经存在,数据会自动附加。但是,我还没有测试过那个部分,因为我早先遇到了错误。 下面是我从https://developers.google.com/apps-script/advanced/bigquery

中松散复制的加载脚本
 function loadCsv() {
  var projectId = 'XX';
  var datasetId = 'YY';
  var tableId = 'daily_stats_testing';


  var file = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = file.getActiveSheet().getRange("A12:AK10000").getValues();
  var data = sheet.getBlob().setContentType('application/octet-stream');

  var job = {
   configuration: {
    load: {
     destinationTable: {
      projectId: projectId,
      datasetId: datasetId,
      tableId: tableId
     },
     skipLeadingRows: 1
    }
   }
  };

  job = BigQuery.Jobs.insert(job, projectId, data);
   var Msg = "Load started. Check status of it here:" + 
   "https://bigquery.cloud.google.com/jobs/%s", projectId
  Logger.log(Msg);
  Browser.msgBox(Msg);
  return;
}

现在我得到的错误(以各种形式,因为我已经测试过的东西)是BigQuery.Jobs函数只接受Blob数据,并且来自我当前工作表的数据(愤怒A12)标记第一个手动插入的数据行)不是Blob可识别的数据集。

有没有办法(任何功能?)我可以使用它直接转换选定的数据范围并使其与Blob兼容? 有没有人有任何关于如何更有效地做到这一点的建议?

不幸的是,脚本必须直接从当前打开的Spreadsheet表中加载,因为它是我将运行的更大脚本的一部分。希望这不是一个太大的障碍!

提前感谢您的帮助:)

1 个答案:

答案 0 :(得分:1)

有没有办法(任何功能?)我可以使用它直接转换选定的数据范围并使其与Blob兼容?

实际上有一个函数可以将对象转换为blob类型,即newBlob(data)

为了测试这个,我从我的电子表格中获得了一个范围并使用它。

function blobTest(){

   var sheet = SpreadsheetApp.getActiveSheet();
   var range = sheet.getRange("A1:C1");
   Logger.log(range); //here, range data is of type Range object

   var blob = Utilities.newBlob(range); 
   Logger.log(blob); //here, range data is now of type Blob object
}