如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?

Posted

技术标签:

【中文标题】如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?【英文标题】:How do I INSERT into Big Query via Apps script with a 2D array from a Google sheet? 【发布时间】:2021-03-25 17:39:05 【问题描述】:

我在大查询中有一个设置了架构的空白表。

我在 Google 工作表中有数据,其中列的顺序与表架构的顺序相同。

当我从 Google 电子表格中获取数据时,我得到一个二维数组 [[xxx1,yyy1,zzz1],[xxx2,yyy2,zzz2]] 等

如何将数组内容插入到 Big Query 表中?

我认为我需要使用以下代码 - 但是 data 变量的格式是什么?如何将我的数组转换为该格式

let job = 
configuration: 
  load: 
    destinationTable: 
      projectId: projectId,
      datasetId: datasetId,
      tableId: tableId
    
  

;
job = BigQuery.Jobs.insert(job, projectId, data [what do I need here??]);

非常感谢

编辑:我应该补充一点,我不能将谷歌表直接连接到表和流。该工作表只是收集每周数据行并向其添加一些位然后将其转储到大查询的权宜之计 - 最终将有数千行,因此不能留在 Google 工作表中

EDIT2:数据也是各种类型的字符串、整数和日期

【问题讨论】:

【参考方案1】:

问题:

BigQuery.Jobs 接受 blob data。所以你需要它以 blob 形式。

修复:

使用newBlob 将数据转换为blob 形式。
function test() 
  var sheet = SpreadsheetApp.getActiveSheet();
  var rows = sheet.getRange("A1:B2").getValues();
  // rows data is 2D string array
  Logger.log(rows); 

  // newBlob only accepts String so we convert rows into one
  var rowsString = rows.join("\n");
  Logger.log(rowsString);

  // data below is now of type Blob object
  var data = Utilities.newBlob(rowsString, 'application/octet-stream');
  Logger.log(data); 

输出:

参考资料:

Appending new Google Sheets Data into BigQuery Table Apps Script, convert a Sheet range to Blob newBlob

【讨论】:

以上是关于如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过c中的指针传递二维数组[重复]

如何从 Angular 5 中的二维数组打印表格?

python如何输入二维数组

如何将一个二维数组中的内容复制到另一个二维数组

jQuery写省级联动列表,创造二维数组,以及如何存/调用二维数组中的数据

在 Google 表格中添加数组作为 EmbeddedChart 的“范围”