【问题标题】:Error 403: Response too large when running BigQuery sync queries on Python library错误 403:在 Python 库上运行 BigQuery 同步查询时响应过大
【发布时间】:2017-10-02 20:48:52
【问题描述】:

我正在使用 Python 客户端库在 Google BigQuery 中运行一个简单的 SELECT 同步查询。我收到以下错误:

*** google.cloud.exceptions.Forbidden: 403 Response too large to return. Consider setting allowLargeResults to true

我为此目的使用run_sync_query()

我的做法是(去掉不必要的东西):

def run_query(query_str):
    from google.cloud import bigquery
    client = biquery.Client()
    query = client.run_sync_query(query_str)
    query.run()
    return query.fetch_data()

我知道API documentation 中有一个参数allowLargeResults,但我不知道如何从客户端库中设置该参数。

【问题讨论】:

    标签: python google-bigquery


    【解决方案1】:

    你可以这样设置:

    query.allow_large_results = True

    https://github.com/GoogleCloudPlatform/google-cloud-python/blob/e716fbef3dc74e8853346426af356bad364f6637/bigquery/google/cloud/bigquery/job.py#L1090

    但是,如果您设置了allow_large_results,那么您还必须指定一个目标表以将结果写入:

    https://cloud.google.com/bigquery/docs/reference/rest/v2/jobs#configuration.query.allowLargeResults

    [可选] 如果为 true 且查询使用旧版 SQL 方言,则允许查询 以较低的成本生成任意大的结果表 表现。需要设置destinationTable。对于标准 SQL 查询时,此标志将被忽略,并且始终允许大结果。 但是,当结果大小超过时,您仍然必须设置destinationTable 允许的最大响应大小。

    【讨论】:

    • 目标表在Python库中具体是如何设置的?
    • 这个东西很容易用 Google 自己搜索,但你可以去:googlecloudplatform.github.io/google-cloud-python/latest/…
    • 这实际上不是使用同步查询,而是run_async_query() 调用,这是我最终使用的。这不是首选选项,因为在这种情况下,您必须处理作业和目标表的命名。我试图将其配置为同步作业,但 AFAIK 是不可能的。如您所见,这不是知道如何使用 Google 的问题 :)
    • 所有查询在 BigQuery 上异步运行。唯一的区别是您是否要在客户端代码中等待它们完成(阻塞-vs-非阻塞)。您可以在两者上设置目标表。所以,我真的不明白你的意思:-/
    • 作为快速参考,这里是可能派上用场的作业配置参数列表:google-cloud-python.readthedocs.io/en/latest/bigquery/generated/…
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 2022-01-20
    • 1970-01-01
    • 2016-02-02
    相关资源
    最近更新 更多