将新的 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 表中的主要内容,如果未能解决你的问题,请参考以下文章
Jackson 不会将新的 JSON 对象附加到现有的 Json 文件中