Google bigquery 通过api将BigQuery结果另存为google表单
在Google BigQuery WebUI中,执行查询后显示查询结果屏幕,并显示“另存为Google工作表”按钮。我喜欢这个特性,但想自动化它,我能通过RESTAPI实现这样的功能吗Google bigquery 通过api将BigQuery结果另存为google表单,google-bigquery,google-sheets-api,Google Bigquery,Google Sheets Api,在Google BigQuery WebUI中,执行查询后显示查询结果屏幕,并显示“另存为Google工作表”按钮。我喜欢这个特性,但想自动化它,我能通过RESTAPI实现这样的功能吗 似乎没有一种直接使用BigQueryAPI实现这一点的简单方法。不过,这方面的解决办法很少: 您可以使用BigQueryAPI,然后使用将其上载到GoogleSheets 你可以用。如果转到,单击“新建脚本”,可以运行下面的代码。你可以根据自己的需要来调整。您还可以添加触发器以每小时/分钟运行脚本 下面是代码片段
似乎没有一种直接使用BigQueryAPI实现这一点的简单方法。不过,这方面的解决办法很少:
函数runQuery(){
//将此值替换为Google中列出的项目ID
//云平台项目。
变量projectId='XXXXXXXX';
var请求={
查询:“选择TOP(word,300)作为word,COUNT(*)作为word\u COUNT”+
'摘自publicdata:samples.shakespeare,其中长度(单词)>10;'
};
var queryResults=BigQuery.Jobs.query(请求,projectId);
var jobId=queryResults.jobReference.jobId;
//检查查询作业的状态。
var sleepTimeMs=500;
而(!queryResults.jobComplete){
实用程序。睡眠(睡眠时间);
睡眠时间*=2;
queryResults=BigQuery.Jobs.getQueryResults(projectId,jobId);
}
//获取所有结果行。
var rows=queryResults.rows;
while(queryResults.pageToken){
queryResults=BigQuery.Jobs.getQueryResults(projectId,jobId{
pageToken:queryResults.pageToken
});
rows=rows.concat(queryResults.rows);
}
如果(行){
var电子表格=SpreadsheetApp.create('BiqQuery结果');
var sheet=spreadsheet.getActiveSheet();
//附加标题。
var headers=queryResults.schema.fields.map(函数(字段){
返回field.name;
});
表.附录行(标题);
//附加结果。
var data=新数组(rows.length);
对于(变量i=0;i
我不知道是否可以通过REST API实现这一点,但另一种解决方案是使用Google Sheets附加组件,它可以让您直接从Google Sheets(和日程报告)查询BQ数据。
function runQuery() {
// Replace this value with the project ID listed in the Google
// Cloud Platform project.
var projectId = 'XXXXXXXX';
var request = {
query: 'SELECT TOP(word, 300) AS word, COUNT(*) AS word_count ' +
'FROM publicdata:samples.shakespeare WHERE LENGTH(word) > 10;'
};
var queryResults = BigQuery.Jobs.query(request, projectId);
var jobId = queryResults.jobReference.jobId;
// Check on status of the Query Job.
var sleepTimeMs = 500;
while (!queryResults.jobComplete) {
Utilities.sleep(sleepTimeMs);
sleepTimeMs *= 2;
queryResults = BigQuery.Jobs.getQueryResults(projectId, 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.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);
Logger.log('Results spreadsheet created: %s',
spreadsheet.getUrl());
} else {
Logger.log('No rows returned.');
}
}