Google bigquery 通过api将BigQuery结果另存为google表单

Google bigquery 通过api将BigQuery结果另存为google表单,google-bigquery,google-sheets-api,Google Bigquery,Google Sheets Api,在Google BigQuery WebUI中,执行查询后显示查询结果屏幕,并显示“另存为Google工作表”按钮。我喜欢这个特性,但想自动化它,我能通过RESTAPI实现这样的功能吗 似乎没有一种直接使用BigQueryAPI实现这一点的简单方法。不过,这方面的解决办法很少: 您可以使用BigQueryAPI,然后使用将其上载到GoogleSheets 你可以用。如果转到,单击“新建脚本”,可以运行下面的代码。你可以根据自己的需要来调整。您还可以添加触发器以每小时/分钟运行脚本 下面是代码片段

在Google BigQuery WebUI中,执行查询后显示查询结果屏幕,并显示“另存为Google工作表”按钮。我喜欢这个特性,但想自动化它,我能通过RESTAPI实现这样的功能吗


似乎没有一种直接使用BigQueryAPI实现这一点的简单方法。不过,这方面的解决办法很少:

  • 您可以使用BigQueryAPI,然后使用将其上载到GoogleSheets

  • 你可以用。如果转到,单击“新建脚本”,可以运行下面的代码。你可以根据自己的需要来调整。您还可以添加触发器以每小时/分钟运行脚本

  • 下面是代码片段:

    函数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.');
      }
    }