有没有办法在仅附加模式下使用 Google Apps 脚本将数据从 BigQuery 加载到 Google 表格?
Posted
技术标签:
【中文标题】有没有办法在仅附加模式下使用 Google Apps 脚本将数据从 BigQuery 加载到 Google 表格?【英文标题】:Is there a way to load data from BigQuery to Google Sheets with Google Apps Script on append-only mode? 【发布时间】:2021-07-20 14:06:18 【问题描述】:由于业务/运营需要,我一直在处理从 BQ 到 GSheets 的数据提取,但我想尽可能地自动化它。
我创建了一个查询,用于提取给定实体的最近 24 小时事件,我希望相关人员只能看到这些最近 24 小时事件。问题是,鉴于我正在使用的 GoogleApps 脚本(您将在下面找到),我找不到附加结果的方法:每次运行 GoogleApps 脚本时,结果都会被覆盖。
我找到了writeDisposition,但它似乎只适用于表格:/
顺便说一句,我想附加结果,因为我需要保存和堆叠周末数据。这个想法是,当人们抓取 gsheets 中的数据时,他们将其删除并等待第二天的新数据。
非常感谢!
GoogleApps 脚本:
function runQuery()
var projectId = '123456789';
var request =
query: 'SELECT * FROM `mytable.example`',
useLegacySql: "false"
;
var queryResults = BigQuery.Jobs.query(request, projectId);
var jobId = queryResults.jobReference.jobId;
// Get all the rows of results.
var rows = queryResults.rows;
while (queryResults.pageToken)
queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId,
pageToken: queryResults.pageToken
);
rows = rows.concat(queryResults.rows);
if (rows)
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('query_results');
// 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);
Logger.log(data.length);
Logger.log('Results spreadsheet created: %s',
spreadsheet.getUrl());
else
Logger.log('No rows returned.');
【问题讨论】:
【参考方案1】:要将当前数据附加到工作表的最后一行,请使用以下示例代码:
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getSheetByName('query_results');
sheet.getRange(sheet.getLastRow()+1, 1, data.length, data[0].length).setValues(data);
它有什么作用?
-
使用getLastRow()获取工作表的最后一行索引
选择要写入新数据的范围,将最后一行加 1,作为要添加的新数据的起始行。
【讨论】:
如果您遇到一些问题,请告诉我,以便我进行相应更新。由于缺少样本数据,我无法重现您的问题。 是的,这确实有效!在我之前的查询中,我将 getRange() 设置为 2(第 2 行),而使用 getLastRow()+1 可以解决问题!谢谢:D以上是关于有没有办法在仅附加模式下使用 Google Apps 脚本将数据从 BigQuery 加载到 Google 表格?的主要内容,如果未能解决你的问题,请参考以下文章
使用 keycloak-nodejs-connect 时出错 - “无法在仅承载模式下交换代码以获取授权”
(Xamarin iOS):ExecutionEngineException - 在仅 aot 模式下运行时尝试 JIT 编译方法