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

Posted

技术标签:

【中文标题】将新的 Google 表格数据附加到 BigQuery 表中【英文标题】:Appending new Google Sheets Data into BigQuery Table 【发布时间】:2017-05-09 12:25:30 【问题描述】:

所以我对所有这一切都是新手,无论是 BigQuery 和 AppScript(一般编码......),而且我边走边学,所以对于某些人来说,我的问题可能看起来很愚蠢。请听我说完。

我创建了一个脚本,可将 10 个最新数据点从我的一个 BigQuery 表加载到 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 兼容? 有没有人对如何更有效地做到这一点有任何建议?

不幸的是,脚本必须直接从当前打开的电子表格中加载,因为它是我将要运行的更大脚本的一部分。希望这不会造成太大的阻碍!

提前感谢您的帮助:)

【问题讨论】:

【参考方案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

【讨论】:

以上是关于将新的 Google 表格数据附加到 BigQuery 表中的主要内容,如果未能解决你的问题,请参考以下文章

将新的子文档附加到主结构中的数组

如何将新的 JVM 附加到生成的 Python 进程?

Jackson 不会将新的 JSON 对象附加到现有的 Json 文件中

有没有办法在不使用 XDocument 的情况下将新的 xml 数据附加到 xml 文件中的现有 xml?

将新的不可变映射值附加到不可变列表

jQuery Address 将新的深层链接附加到现有的深层链接