Sql Google BigQuery:错误413响应太大

Sql Google BigQuery:错误413响应太大,sql,google-apps-script,google-bigquery,Sql,Google Apps Script,Google Bigquery,这是一个有时似乎很难重现的问题,但后来一次又一次地出现,让我认为这可能与配额有关,但我看不到任何一个配额是为我们设定的 var myQuery = 'SELECT * FROM [' + myProjectId + ':' + myDatasetId + '.' + historyTable + '] WHERE ID NOT IN (SELECT ID FROM [' + myProjectId + ':' + myDatasetId + '.' + federatedTable + '])

这是一个有时似乎很难重现的问题,但后来一次又一次地出现,让我认为这可能与配额有关,但我看不到任何一个配额是为我们设定的

var myQuery = 'SELECT * FROM [' + myProjectId + ':' + myDatasetId + '.' + historyTable + '] WHERE ID NOT IN (SELECT ID FROM [' + myProjectId + ':'  + myDatasetId + '.' + federatedTable + '])'

  // Overwrite the history table with a version with only the records that are NOT in federated
   var job = {
    configuration: {
      query: {
        query: myQuery,
        maximumBillingTier: "2",
        writeDisposition:'WRITE_TRUNCATE',
        useQueryCache: true,
        allowLargeResults: true,
        destinationTable: {
          projectId: myProjectId,
          datasetId: myDatasetId,
          tableId: historyTable
        }}
    }};

  var queryResults = BigQuery.Jobs.insert(job, myProjectId);



var jobId = queryResults.jobReference.jobId;



// Wait until that job completes


// Check on status of the Query Job.
  var sleepTimeMs = 500;
  while (!queryResults.jobComplete) {
    Utilities.sleep(sleepTimeMs);
    queryResults = BigQuery.Jobs.getQueryResults(myProjectId, jobId);
    Logger.log("Not Done");
  }
错误发生在线路上

queryResults = BigQuery.Jobs.getQueryResults(myProjectId, jobId);
该表有91列,大约25000行,因此响应的限制应该远未达到128mb


阅读了所有类似的Stackoverflow问题,并尝试了所有方法

看起来您想运行一个查询作业,将结果写入指定的目标表。但是,在循环中,每次调用查询时,您都在调用
getQueryResults
哪个查询本身。这就是导致413的原因

我不认为这是你真正想要做的

相反,只需轮询
job.status.state
,就可以获得确定何时完成的结果。这不会把所有的结果都掩盖起来。例如:

function runQuery() {
  var projectId = 'XXXXXX';
  var myQuery = 'SELECT TOP(word, 300) AS word, COUNT(*) AS word_count ' +
      'FROM publicdata:samples.shakespeare WHERE LENGTH(word) > 10;'

  var job = {
    configuration: {
      query: {
        query: myQuery,
        writeDisposition:'WRITE_TRUNCATE',
        useQueryCache: true,
        allowLargeResults: true,
        destinationTable: {
          projectId: 'XXXXXX',
          datasetId: 'test',
          tableId: 'test_table'
        }}
  }};

  var job = BigQuery.Jobs.insert(job, projectId);
  Logger.log(job.status.state);
  var jobId = job.jobReference.jobId;

  // Check on status of the Query Job.
  var sleepTimeMs = 500;
  while (job.status.state !== 'DONE') {
    Utilities.sleep(sleepTimeMs);
    job = BigQuery.Jobs.get(projectId, jobId);
    Logger.log(job.status.state);
  }
}

谢谢Graham,但我已经尝试过了,没有什么不同,我会更新上面的代码,以显示它包含在内,或者这是一个糟糕的形式?如果是这样,请告诉我,我会撤销。此外,只有当返回的压缩量大于128mb时,配置更改才会起作用。离这里很远,等一下。Does
BigQuery.Jobs.getQueryResults(myProjectId,jobId)尝试通过连线获取查询的实际结果?这真的是你想做的吗?太棒了!非常感谢。