我有一张桌子,需要根据Google表格中的新数据添加更多记录。
我知道如何使用union来实现它,这意味着运行
Select * from (SELECT * from table),(select * from temp_table_from_sheets)
I.e:查询旧表,新表。删除旧表并将查询结果保存为旧表。
但必须只能附加BigQuery.Jobs.insert
而不是{。}}。
你能帮我吗?
编辑 - 解决方案
在得到以下答案后,我搜索了很多内容,最终在Apps Script
中提出了以下解决方案:
var sql = 'select ...'
var projectId = '...'
var datasetId = '...'
var tableId = '...'
var job = {
configuration: {
query: {
query: sql,
writeDisposition:'WRITE_APPEND',
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
}
}
}
};
var queryResults = BigQuery.Jobs.insert(job, projectId)
答案 0 :(得分:0)
来自BigQuery API Basics - Managing Tables:
追加数据
您可以从源文件或表中将其他数据加载到表中 通过附加查询结果。请注意加载数据的架构 必须与现有表的架构匹配,但您可以在追加之前update the schema。
...
要附加查询结果中的数据:
运行异步查询,传入现有表的名称, 并设置
writeDisposition=WRITE_APPEND
。
答案 1 :(得分:0)
将Google表格内容推送到BigQuery I found it here
棘手的是将工作表数据转换为CSV。
var file = SpreadsheetApp.openByUrl(url).getSheetByName(sheetName);
// This represents ALL the data
var rows = file.getDataRange().getValues();
var rowsCSV = rows.join("\n");
var blob = Utilities.newBlob(rowsCSV, "text/csv");
var data = blob.setContentType('application/octet-stream');
// Create the data upload job.
var job = {
configuration: {
load: {
destinationTable: {
projectId: projectId,
datasetId: datasetId,
tableId: tableId
},
skipLeadingRows: 1,
writeDisposition: writeDispositionSetting
}
}
};
// send the job to BigQuery so it will run your query
var runJob = BigQuery.Jobs.insert(job, projectId, data);
Logger.log(runJob.status);
var jobId = runJob.jobReference.jobId
Logger.log('jobId: ' + jobId);
var status = BigQuery.Jobs.get(projectId, jobId);
// wait for the query to finish running before you move on
while (status.status.state === 'RUNNING') {
Utilities.sleep(500);
status = BigQuery.Jobs.get(projectId, jobId);
Logger.log('Status: ' + status);
}
Logger.log('FINNISHED!');
}