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