使用 Google BigQuery / Apps 脚本为插入 Google 表格的数据添加时间戳

Posted

技术标签:

【中文标题】使用 Google BigQuery / Apps 脚本为插入 Google 表格的数据添加时间戳【英文标题】:Adding a time stamp for data inserted into Google Sheets using Google BigQuery / Apps Script 【发布时间】:2021-07-29 06:23:48 【问题描述】:

我正在按照代码示例 here 使用 Google Apps 脚本将来自 BigQuery 的数据插入到 Google 表格中。

我能够让脚本工作,但我想将更新的时间戳作为新列添加到数据中。

请参阅上面的示例,在此特定部分中:

(原码)

  if (rows) 
    var spreadsheet = SpreadsheetApp.create('BiqQuery Results');
    var sheet = spreadsheet.getActiveSheet();

    // Append the headers.
    var headers = queryResults.schema.fields.map(function(field) 
      return field.name;
    );
    sheet.appendRow(headers);

    // Append the results.
    var data = new Array(rows.length);
    for (var i = 0; i < rows.length; i++) 
      var cols = rows[i].f;
      data[i] = new Array(cols.length);
      for (var j = 0; j < cols.length; j++) 
        data[i][j] = cols[j].v;
      
    
    sheet.getRange(2, 1, rows.length, headers.length).setValues(data);

举一个我想要达到的目标的例子,假设我运行了这个查询: select sample_data from data limit 3

结果:

sample_data
1
2
3

我想添加一个带有当前时间戳的附加数据列。我可以通过以下方式做到这一点: select sample_number, current_timestamp() as now from data

sample_number   now
1               2021-07-29 06:19:04.291269 UTC
2               2021-07-29 06:19:04.291269 UTC
3               2021-07-29 06:19:04.291269 UTC

但我想使用 Google Apps 脚本来实现这个结果,这样我就不需要将 current_timestamp() as now 附加到将使用此模块调用的所有 SQL 查询中。

我的想法是这样的:

sheet.getRange(2, 1, rows.length, headers.length + 1).setvalues(new Date());

但是,我认为这将是列长度不匹配。

我想我需要在数组中添加一个新列,然后添加 new Date() 作为行值,然后调用 .setValues() 将数组写入 Google 表格,但不知道该怎么做。

谁能帮帮我?

【问题讨论】:

【参考方案1】:

setValues(values) 需要 Object[][]

您应该将“日期列”添加到您的 data 数组,然后添加 setValues

const date = new Date();
for (let i = 0; i < data.length; i++) 
  if (i === 0)  row.push('now'); 
  else  row.push(date); 

sheet.getRange(2, 1, data.length, data[0].length).setValues(data);

【讨论】:

以上是关于使用 Google BigQuery / Apps 脚本为插入 Google 表格的数据添加时间戳的主要内容,如果未能解决你的问题,请参考以下文章

通常如何从 Google Apps 脚本访问 BigQuery

例外:未配置访问 - API 更新后使用 Google Apps 脚本的 BigQuery

如何使用 Google Apps 脚本将来自 Google 电子表格和 ScriptDB 的数据插入 BigQuery 表

从工作表中的 Google Apps 脚本访问 BigQuery 时需要登录错误

有没有办法在仅附加模式下使用 Google Apps 脚本将数据从 BigQuery 加载到 Google 表格?

Google Apps 脚本:从 AuthConfig 到 Bigquery