配额和限制

BigQuery 会限制传入请求的最大速率,并按项目强制执行相应的配额政策。具体政策取决于资源可用性、用户个人资料、服务使用记录和其他因素,如有更改,恕不另行通知。

以下列表概述了系统当前的速率限制和配额限制。

查询作业

以下限制适用于通过运行交互式查询而自动创建的查询作业,以及使用 jobs.query 和查询类型的 jobs.insert 方法调用以编程方式提交的作业。

查询缓存返回结果的查询以及试运行查询计入此限制。通过使用 --dry_run 标志或设置查询作业中的 dryRun 属性,您可以指定试运行查询。

系统会在项目级层应用此限制。要提高此限制,请与支持团队联系与销售人员联系

  • 对 Cloud Bigtable 外部数据源执行的交互式查询的并发速率限制 - 4 个并发查询

您最多只能对 Cloud Bigtable 外部数据源执行 4 个并发查询。

  • 包含用户定义函数 (UDF) 的旧版 SQL 查询的并发速率限制 - 6 个并发查询

包含 UDF 的旧版 SQL 查询的并发速率限制涵盖交互式查询和批量查询。包含 UDF 的交互式查询也会计入交互式查询的并发速率限制。此限制不适用于标准 SQL 查询。

  • 每日查询大小限制 - 默认情况下无限制

您可以通过设置自定义配额,指定用户可以查询的数据量限制。

  • 每日目标表更新限制 - 每张表每天更新 1000 次

对于查询作业中的目标表,每张表每天最多可以更新 1000 次。目标表的更新涵盖通过以下方式运行查询时所执行的附加操作和覆盖操作:使用控制台;使用经典版 BigQuery 网页界面;使用 bq 命令行工具;或者调用 jobs.query 和查询类型的 jobs.insert API 方法

  • 查询执行时间限制 - 6 小时

此限制无法更改。

  • 每个查询引用的最大表数 - 1000

  • 未解析旧版 SQL 查询的最大长度 - 256 KB

  • 未解析标准 SQL 查询的最大长度 - 1 MB

  • 已解析旧版和标准 SQL 查询的最大长度 - 12 MB

已解析查询的长度限制涵盖查询引用的所有视图和通配符表的长度。

  • 标准 SQL 查询参数的最大数量 - 10000

  • 最大响应大小 - 压缩后 10 GB1

1大小取决于数据的压缩比。实际响应大小可能远大于 10 GB。

向目标表写入比较大的查询结果时,不限制最大响应大小。

  • 最大行大小 - 100 MB2

2最大行大小的限制为近似值,因为该限制基于行数据的内部表示法。系统会在执行查询作业时的某些阶段实施该限制。

  • 表、查询结果或视图定义中的最大列数 - 10000

  • 每个项目中可采用按需价格的最大并发槽数 - 2000

一个项目中的所有查询共享按需查询的默认数。通常,如果一次处理的查询少于 100 GB,则不太可能使用全部 2000 个槽。

要查看使用的槽数,请参阅使用 Stackdriver 监控 BigQuery。如果需要的槽数超过 2000 个,请与销售代表联系,以商讨固定价格是否符合您的需求。

  • 针对 Cloud Bigtable 外部数据源的最大并发查询数 - 4

如需了解适用于 SQL 查询中用户定义函数的限制,请参阅 UDF 限制

加载作业

以下限制适用于使用命令行工具、控制台或经典版 BigQuery 网页界面加载数据时自动创建的作业,以及使用加载类型的 jobs.insert API 方法以编程方式提交的加载作业。

向 BigQuery 中加载数据时,受以下限制约束。

  • 每张表每天的加载作业数 - 1000 个(包括失败的作业)
  • 每个项目每天的加载作业数 - 100000 个(包括失败的作业)
  • 每张表每天 1000 个加载作业的限制无法提高。
  • 行和单元格大小的限制
    数据格式 最大限制
    CSV 100 MB(行和单元格大小)
    JSON 100 MB(行大小)
  • 每张表的最大列数 - 10000
  • 最大文件大小:
    文件类型 压缩后 压缩前
    CSV 4 GB 5 TB
    JSON 4 GB 5 TB
    Avro 不支持压缩的 Avro 文件,但支持压缩的数据块。BigQuery 支持 DEFLATE 和 Snappy 编解码器。 5 TB(文件头为 1 MB)
  • 每个加载作业的大小上限 - CSV、JSON、Avro、Parquet 和 ORC 格式的所有输入文件共 15 TB
  • 作业配置中的最大源 URI 数 - 10000 个 URI
  • 每个加载作业的最大文件数 - 总计 1000 万个文件,包括与所有通配符 URI 匹配的所有文件
  • 加载作业执行时间限制 - 6 小时
  • 您必须从数据集所在区域中的 Cloud Storage 存储分区加载数据,美国境内的数据集除外(存储分区可以是多区域存储分区或数据集所在区域的单区域存储分区)。您可以将数据从任何区域加载到美国境内的数据集。

如需了解详情,请参阅《简介:将数据加载到 BigQuery》。

复制作业

以下限制适用于在 BigQuery 中复制表。以下限制适用于使用命令行工具、控制台或经典版 BigQuery 网页界面复制数据时自动创建的作业,以及使用复制类型的 jobs.insert API 方法以编程方式提交的复制作业。

  • 每张表每天的复制作业数 - 1000 个(包括失败的作业)
  • 每个项目每天的复制作业数 - 100000 个(包括失败的作业)

导出作业

以下限制适用于从 BigQuery 导出数据的作业。以下限制适用于使用命令行工具、控制台或经典版 BigQuery 网页界面导出数据时自动创建的作业,以及使用加载类型的 jobs.insert API 方法以编程方式提交的导出作业。

  • 每天的导出作业数 - 每个项目限 100000 个导出作业,每天的数据量上限为 10 TB(所有导出作业的累计数据量限制为 10 TB)
  • 如果每天要导出 10 TB 以上的数据,请使用 BigQuery Storage API

  • 通配符 URI - 每次导出限 500 个通配符 URI

数据集限制

以下限制适用于数据集:

  • 每个项目的数据集数 - 不受限制
    每个项目的数据集数不受配额限制;但是当项目中的数据集接近数千个时,经典版界面的性能会开始下降,列出数据集的速度会变慢。
  • 每个数据集的表数 - 不受限制
    当数据集中表的数量接近 50000 个或更多时,枚举这些表时速度会变慢。无论您是使用 API 调用,还是使用经典版 BigQuery 网页界面,枚举性能都会受到影响。目前,GCP Console 中的 BigQuery 网页界面最多允许每个数据集中显示 50000 个表。要提升经典版 BigQuery 网页界面的性能,您可以使用 ?minimal 参数将每个项目显示的表数限制为 30000 个。您可以按以下格式向经典版 BigQuery 网页界面网址添加参数:https://bigquery.cloud.google.com/queries/[PROJECT_NAME]?minimal
  • 数据集的访问控制列表中的最大授权视图数 - 2500
    您可以创建授权视图来限制对源数据的访问。可以在 SQL 查询中排除您不希望用户在查询视图时看到的列,然后使用该 SQL 查询来创建授权视图。您最多可以向数据集的访问权限控制列表添加 2500 个授权视图。
  • 数据集元数据更新操作的最大速率 - 每个数据集每 10 秒执行 5 次操作
    数据集元数据更新限制适用于通过以下方式执行的所有元数据更新操作:使用控制台;使用经典版 BigQuery 网页界面;使用 bq 命令行工具;或者调用 datasets.insertdatasets.patchdatasets.update API 方法。
  • 数据集说明的最大长度 - 16384 个字符
    为数据集添加说明时,说明文本最多可包含 16384 个字符。

表限制

以下限制适用于 BigQuery 表。

所有表

  • 列说明的最大长度 - 16384 个字符

为列添加说明时,说明文本最多可包含 16384 个字符。

标准表

  • 每天最大表操作数 - 1000

您每天对每个表最多只能执行 1000 次操作,无论该操作是将数据附加到表、覆盖表还是使用 DML INSERT 语句将数据写入表。

最大表操作数涵盖符合以下条件的所有加载作业复制作业查询作业的总操作数:向目标表附加数据、覆盖目标表,或者使用 DML INSERT 语句向表写入数据。

例如,如果运行 500 个将数据附加到 mytable 的复制作业和 500 个将数据附加到 mytable 的查询作业,就会达到配额。

  • 表元数据更新操作的最大速率 - 每张表每 10 秒执行 5 次操作

表元数据更新限制适用于通过以下方式执行的所有元数据更新操作:使用控制台;使用经典版 BigQuery 网页界面;使用 bq 命令行工具;或者调用 tables.inserttables.patchtables.update API 方法。此限制也适用于作业输出。

  • 表、查询结果或视图定义中的最大列数 - 10000

分区表

  • 每个分区表的最大分区数 - 4000

  • 单个作业修改的最大分区数 - 2000

每个作业操作(查询或加载)最多可影响 2000 个分区。Google BigQuery 会拒绝任何影响超过 2000 个分区的查询或加载作业。

  • 每个表每天修改的最大分区数 - 5000

您每天最多只能对一个分区表进行 5000 次分区修改。可以使用覆盖或附加到分区数据的操作来修改分区。修改分区的操作包括:加载作业、将结果写入分区的查询,或修改分区数据的 DML 语句(INSERTDELETEUPDATEMERGE)。

单个作业可能会影响多个分区。例如,DML 语句可以更新多个分区中的数据(限提取时间表和分区表)。查询作业和加载作业也可以写入多个分区,但仅限于分区表。BigQuery 在确定某个作业消耗的配额量时,会使用受该作业影响的分区数量。流式插入不会影响此配额。

  • 分区操作的最大速率 - 每 10 秒进行 50 次分区操作

视图限制

  • 最大嵌套视图层级数量 - 16

BigQuery 最多支持 16 个层级的嵌套视图。如果嵌套层级数超过 16 层,系统会返回 INVALID_INPUT 错误。

  • 用于定义视图的标准 SQL 查询最大长度 - 256000 个字符

创建视图时,标准 SQL 查询的文本最多可以包含 256000 个字符。

  • 数据集的访问权限控制列表中的最大授权视图数 - 2500

您可以创建授权视图来限制对源数据的访问。您可以在 SQL 查询中排除您不希望用户在查询视图时看到的列,然后使用该 SQL 查询来创建授权视图。您最多可以向数据集的访问权限控制列表添加 2500 个授权视图。

用户定义函数 (UDF) 限制

以下限制适用于 SQL 查询中的用户定义函数

  • 处理表中的一行时,JavaScript UDF 输出的数据量 - 约 5 MB 或更小。
  • 包含用户定义函数 (UDF) 的旧版 SQL 查询的并发速率限制 - 6 个并发查询。
  • 包含 UDF 的旧版 SQL 查询的并发速率限制涵盖交互式查询和批量查询。包含 UDF 的交互式查询也会计入交互式查询的并发速率限制。此限制不适用于标准 SQL 查询。

  • 查询作业最多可包含 50 项 JavaScript UDF 资源(内嵌代码 blob 或外部文件)。
  • 每个内嵌代码 blob 的大小上限为 32 KB。
  • 每项外部代码资源的大小上限为 1 MB。

数据操纵语言 (DML) 语句

以下限制适用于数据操纵语言 (DML) 语句。

  • 每个表每天的最大总计 INSERT、UPDATE、DELETE 和 MERGE 语句数 - 1000

MERGE 语句被计为单个 DML 语句,即使它包含多个 INSERT、UPDATE 或 DELETE 子句。

流式插入

以下限制适用于将数据流式插入到 BigQuery

  • 最大行大小:1 MB。超过此值将导致 invalid 错误。
  • HTTP 请求大小限制:10 MB。超过此值将导致 invalid 错误。
  • 每秒最大行数:每个项目每秒 10 万行。超过此数量将导致 quotaExceeded 错误。每张表每秒的最大行数也是 10 万行。
    您可以将所有配额用于一个表,也可以将此配额分给项目中的多个表。
  • 每个请求的最大行数:每个请求限 10000 行。我们建议最多 500 行。批处理在一定程度上可以提高性能和吞吐量,但会影响每个请求的延迟时间。每个请求的行数过少,以及每个请求的开销都会导致提取效率低下。每个请求的行数过多,吞吐量可能会下降。

    虽然我们建议每个请求使用大约 500 行,但用具有代表性的数据(架构和数据大小)进行实验将有助于您确定理想的批量大小。
  • 每秒最大字节数:每张表每秒 100 MB。超过此数量将导致 quotaExceeded 错误。

如果您的项目需要更多流式数据配额,可以通过 Google Cloud Platform Console 页面提交申请。您能以 50000 行的倍数来为流式数据设置自定义配额。您通常会在 2 到 3 个工作日内收到回复。

API 请求

所有 API 请求

以下限制适用于所有 BigQuery API 请求:

  • 每位用户每秒的 API 请求数 - 100
    如果每秒发出超过 100 个请求,则可能会受到限制。此限制不适用于流式插入
  • 每位用户的并发 API 请求数:300
    如果每位用户发出超过 300 个并发请求,则可能会受到限制。此限制不适用于流式插入。

tabledata.list 请求

tabledata.list 方法可从一组指定的行中检索表数据。以下限制适用于 tabledata.list 请求:

  • 每个项目的最大 tabledata.list 查询数:500 个/秒
    调用 tabledata.list 时,每个项目每秒最多可提交 500 个请求。
  • 调用 tabledata.list 时每个项目每秒返回的最大字节数:60 MB/秒
    调用 tabledata.list 时,每个项目每秒最多可以返回 60 MB 的表行数据。该限制适用于从中读取数据的表所在的项目。
  • 调用 tabledata.list 时每个项目每秒返回的最大行数:15 万行/秒
    调用 tabledata.list 时,每个项目每秒最多可以返回 15 万表行。该限制适用于从中读取数据的表所在的项目。

tables.insert 请求

tables.insert 方法可在数据集内创建一个新的空表。以下限制适用于 tables.insert 请求:

  • 每个项目每秒的最大请求数:10 - 调用 tables.insert 时,您每秒最多可以为每个项目创建 10 个请求。此限制涵盖创建表的语句(例如 CREATE TABLE DDL 语句)以及向目标表写入结果的查询

projects.list 请求

projects.list 方法可列出您有权访问的所有项目。以下限制适用于 projects.list 请求:

  • 每个项目每秒的最大请求数:2 - 调用 projects.list 时,您每秒最多可以为每个项目创建 2 个请求。

jobs.get 请求

jobs.get 方法可返回关于特定作业的信息。以下限制适用于 jobs.get 请求:

  • 每个项目每秒的最大请求数:1000 - 调用 jobs.get 时,您每秒最多可以为每个项目创建 1000 个请求。

jobs.query 请求

jobs.query 方法可同步运行 SQL 查询,并可在该查询于指定的超时时限内完成的情况下返回查询结果。

  • 响应大小上限:10 MB - 默认情况下,每页结果返回的数据行数没有上限,但响应大小不得超过 10 MB。您可以使用 maxResults 参数更改要返回的行数。

何时补充配额?

系统会全天定期补充每日配额,以体现这些配额对速率限制行为起到指导作用的意图。系统还会间歇性刷新,以避免在配额用完时出现长时间中断。通常情况下,系统每过几分钟就会提供更多配额,而不是每天在全局范围内补充一次配额。

错误代码

配额和限制错误会返回 403400 HTTP 响应代码。如需查看错误代码的完整列表和问题排查步骤,请参阅排查错误

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面