当我执行这段Python代码时:

body = {
  'configuration': {
    'query': {
      'destinationTable': {
        'projectId': PROJECT_ID,
        'tableId': 'new_items',
        'datasetId': 'data_set'
      },
      'writeDisposition': 'WRITE_TRUNCATE',
      'allowLargeResults': True,
      'query': 'select item from data_set.items where item not in (select item from data_set.old_items);'
    }
  }
}
job = service.jobs().insert(projectId = PROJECT_ID, body = body).execute()


尽管allowLargeResults设置为True,我仍然收到此错误:


  响应太大而无法返回。考虑在作业配置中将allowLargeResults设置为true。


谁能解释这个原因,并给我提示如何摆脱这个错误?

最佳答案

我怀疑此错误是由于查询产生结果的中间阶段之一。最有可能是NOT IN半联接中使用的SELECT。我能想到的唯一解决方法是将查询重写为

select a.item from
  data_set.items a
    left outer join each
  data_set.old_items b
on a.item = b.item
where b.item IS NULL


NOT IN semijoin子句不允许使用EACH修饰符,但LEFT OUTER JOIN允许使用它,这将使查询范围扩大。

关于python - BigQuery中的allowLargeResults无法运作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30192072/

10-12 20:10