BigQuery结果响应太大

时间:2014-10-29 14:33:25

标签: google-bigquery

我试图使用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.listjobs.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:响应太大而无法返回。

2 个答案:

答案 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还不够大?