【问题标题】:BigQuery results too large responseBigQuery 结果过大响应
【发布时间】:2014-10-29 14:33:25
【问题描述】:

我正在尝试使用 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:响应太大而无法返回。

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    从您的错误消息看来,查询失败,而不是表数据列表调用。

    allowLargeResults 允许查询产生任意大的输出结果。您可以在此处阅读更多信息:https://cloud.google.com/bigquery/docs/reference/v2/jobs 您可以在 configuration.query.allowLargeResults 中设置它。 90MB 的结果不需要它,但大于 128MB 的结果就需要它。也许您的结果比您预期的要大?您还需要为 allowLargeResults 设置一个明确的目标表。

    一旦您的查询完成,应该可以按照您的描述列出结果。如果您仍有问题,如果您提供 job_id,我们可以查看个人详细信息。

    【讨论】:

    • explicit destination mmm... 我会调查一下,谢谢你的提示。
    【解决方案2】:

    如果我删除查询中的排序,它似乎可以工作:

    query = """
        SELECT *
        FROM [mydataset.{0}]
        WHERE delta > {1}
        --ORDER BY delta ASC
    """.format(TABLE_ID, int(delta))
    

    嗯,这很奇怪……BigQuery 不够大?

    【讨论】:

    • @JordanTigani 这是怎么回事?
    • 如果你写到一个表中,那么这个命令就没有意义了。如果 order by 在子查询中,请分享您的查询,我们会尽力帮助您优化。
    • @N.N.有趣的是,至少我认为这不会影响我的 delta 使用。谢谢。
    • 您对排序数据的具体要求是什么?如果您只对前 N 个结果感兴趣,则 LIMIT 应该允许您的查询在没有结果太大异常的情况下执行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    相关资源
    最近更新 更多