使用 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 时需要登录错误