我试图使用python api列出表中的数据:
tableDataList = tableDataCollection.list(**params).execute(http=http)
允许参数:
list(projectId=*, datasetId=*, tableId=*, pageToken=None, maxResults=None, startIndex=None)
我收到的错误是:
apiclient.errors.HttpError: <HttpError 403 when requesting https://www.googleapis.com/bigquery/v2/projects/myproject/queries?alt=json returned "Response too large to return.">
目前我创建一个查询作业并接收到destinationTable,并在该destinationTable上列出数据(用于表现其他)。我已经知道我可以使用allowLargeResults
,但我无法在tabledata.list
或jobs.query
端点上找到它。我在哪里设置或如何克服问题? 97k行的数据仅为90mb左右。
更新:
我已将查询更改为使用目标表(使用jobs.insert
),然后我可以将allowLargeResults
设置为True
。
body = {
'configuration': {
'query': {
'createDisposition': 'CREATE_IF_NEEDED',
'writeDisposition': 'WRITE_TRUNCATE',
'useQueryCache': False,
'allowLargeResults': True,
'destinationTable': {
'projectId': PROJECT_ID,
'datasetId': DATASET_ID,
'tableId': 'tmp_{0}'.format(TABLE_ID),
},
'query': query,
}
}
}
但是,我仍然收到同样的错误:
ResponseTooLarge:响应太大而无法返回。
答案 0 :(得分:1)
从错误消息中看,查询失败,而不是表数据列表调用。
allowLargeResults允许查询产生任意大的输出结果。您可以在此处阅读更多相关信息:https://cloud.google.com/bigquery/docs/reference/v2/jobs您可以在configuration.query.allowLargeResults中进行设置。对于90MB的结果,它不是必需的,但是&gt;的结果。 128MB需要它。也许你的结果比你预期的要大?您还需要为allowLargeResults设置显式目标表。
查询完成后,应该可以按照您的描述列出结果。如果您仍有问题,如果您提供job_id,我们可以查看个别详细信息。
答案 1 :(得分:0)
如果我删除查询中的顺序似乎有效:
query = """
SELECT *
FROM [mydataset.{0}]
WHERE delta > {1}
--ORDER BY delta ASC
""".format(TABLE_ID, int(delta))
嗯,这很奇怪...... BigQuery还不够大?