首页 > 解决方案 > 如何在 Google Apps 脚本中迭代 BigQuery API 结果?

问题描述

我正在 Google Apps 脚本中处理一些自动查询。我有一个包含 300k+ 结果的结果数据集,但我只能获得前 30k。如何修改此代码,以便它遍历所有查询结果以返回所有 300k 记录?我想将所有内容都返回到变量“rows”中。

编辑以获取更多信息:我尝试过像 getNextPage() 和 iterateAll() 这样的 BQ API 方法,但我无法在 queryResults 上调用这些方法。我查看了 Stack Overflow 并没有太多关于此的文档。此当前脚本当前挂在 while(queryResults.pagetoken) 循环上,无法输出所有 300k 结果。

var request = {
    query: query,
    "useLegacySql": false
    
  };
    Logger.log(request);
  var queryResults = BigQuery.Jobs.query(request, projectId);
  var jobId = queryResults.jobReference.jobId;
    Logger.log(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;
   Logger.log(queryResults.pageToken);
  
  while (queryResults.pageToken) {
    queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, {
      pageToken: queryResults.pageToken
    });
    rows = rows.concat(queryResults.rows);
    Logger.log('row check:');
    Logger.log(queryResults.totalRows);
    Logger.log(queryResults.rows.length);
  }

标签: google-apps-scriptgoogle-bigquery

解决方案


推荐阅读