bigQuery中的allowLargeResults不起作用

时间:2015-05-12 13:16:23

标签: python google-bigquery

当我执行这段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。

有人可以解释这个的原因,并给我一个如何摆脱这个错误的提示吗?

1 个答案:

答案 0 :(得分:1)

我怀疑这个错误是由于查询生成结果的其中一个阶段造成的。最有可能的是它在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允许它,这应该使查询比例。