所以我对所有这些都很陌生,包括BigQuery和AppScript(一般编码......),而且我正在学习,所以也许我的一些问题可能看起来很愚蠢。请听我说。
我创建了一个脚本,可以从我的一个BigQuery表中将10个最新数据点加载到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兼容? 有没有人有任何关于如何更有效地做到这一点的建议?
不幸的是,脚本必须直接从当前打开的Spreadsheet表中加载,因为它是我将运行的更大脚本的一部分。希望这不是一个太大的障碍!
提前感谢您的帮助:)
答案 0 :(得分: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
}