配额和限制

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

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

查询作业

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

查询缓存返回结果的查询计入此限制(在 BigQuery 确定查询的结果是否是缓存命中期间)。试运行查询计入此限制。通过使用 --dry_run 标志或在查询作业中设置 dryRun 属性,您可以指定试运行查询。

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

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

您最多只能对 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 个,请与销售代表联系,以商讨固定价格是否符合您的需求。

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

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

加载作业

以下限制适用于使用命令行工具、Cloud Console 或经典版 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)
  • 每个加载作业的大小上限 - 15 TB(包括 CSV、JSON、Avro、Parquet 和 ORC 格式的所有输入文件)
  • 作业配置中的最大源 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 个将数据附加到 的查询作业,就会达到配额。

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

表元数据更新限制适用于通过以下方式执行的所有元数据更新操作:Cloud Console、经典版 BigQuery 网页界面、bq 命令行工具、客户端库、调用 tables.inserttables.patchtables.update API 方法,或者执行 ALTER TABLE DDL 语句。此限制也适用于作业输出。

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

分区表

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

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

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

  • 每个提取时间分区表修改的最大分区数 - 5000
  • 每个列分区表修改的最大分区数 - 30000

您每天最多只能对一个提取时间分区表进行 5000 次分区修改,每天最多只能对一个列分区表进行 30000 次分区修改。可以使用覆盖或附加到分区数据的操作来修改分区。修改分区的操作包括:加载作业、将结果写入分区的查询,或修改分区数据的 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 查询。

  • 查询作业中的 JavaScript UDF 资源(例如内嵌代码 blob 或外部文件)的数量上限 - 50
  • 每个内嵌代码 blob 的大小上限 - 32 KB。
  • 每个外部代码资源的大小上限 - 1 MB。

以下限制适用于永久性用户定义函数
  • 函数名称的长度上限 - 256 个字符
  • 参数数量上限 - 256
  • 参数名称的长度上限 - 128 个字符
  • 用户定义函数引用链的深度上限 - 16
  • 类型为 STRUCT 的参数或输出的深度上限 - 15
  • 类型为 STRUCT 的参数或输出中的字段数上限(每个 UDF) - 1024
  • 每次查询的唯一 UDF 和表引用数上限 - 1000 充分扩展后,每个 UDF 可引用的唯一表和 UDF 总数最高为 1000 个。
  • CREATE FUNCTION 语句中的 JavaScript 库的数量上限 - 50
  • 包含的 JavaScript 库路径的长度上限 - 5000 个字符
  • 每个 UDF 的更新速率上限 - 5 次/10 秒 创建函数后,每个函数每 10 秒最多可更新 5 次。
  • 每个内嵌代码 blob 的大小上限为 32 KB。
  • 每项 JavaScript 代码资源的大小上限为 1 MB。

数据操纵语言 (DML) 语句

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

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

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

流式插入

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

如果您在插入行时未填写 insertId 字段:

目前,这些配额仅适用于 US 多区域位置,您必须完整填写 BigQuery Streaming V2 测试版注册表单才能使用这些配额。

  • 每秒最大行数:100 万
    如果您在插入每一行时未填写 insertId 字段,每个项目每秒的限制将为 100 万行。此配额属于累计配额。您可以将此配额全部用于一个表,也可以使用此配额向一个项目中的多个表流式传输数据。

    超过此数量将导致 quotaExceeded 错误。
  • 每秒最大字节数:1 GB
    如果您在插入每一行时未填写 insertId 字段,每个项目每秒的限制将为 1 GB。系统在项目级层应用此限制。此限制不会应用于单个表。

    超过此数量将导致 quotaExceeded 错误。

如果您在插入行时填写了 insertId 字段:

  • 每秒最大行数:10 万
    如果您在插入每一行时填写了 insertId 字段,每个项目或每个表每秒的限制将为 10 万行。此配额属于累计配额。您可以将此配额全部用于一个表,也可以使用此配额向一个项目中的多个表流式传输数据。

    超过此数量将导致 quotaExceeded 错误。
  • 每秒最大字节数:100 MB
    如果您在插入每一行时填写了 insertId 字段,每个表每秒的限制将为 100 MB。

    超过此数量将导致 quotaExceeded 错误。

无论您是否填写了 insertId 字段,以下额外的流式传输配额都适用:

  • 最大行大小:1 MB
    超过此值将导致 invalid 错误。
  • HTTP 请求大小限制:10 MB
    超过此值将导致 invalid 错误。
  • 每个请求的行数上限:每个请求限 10000 行。
    我们建议最多不要超过 500 行。批处理在一定程度上可以提高性能和吞吐量,但会影响每个请求的延迟时间。每个请求的行数过少,则每个请求的开销可导致提取效率低下。每个请求的行数过多,吞吐量可能会下降。

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

如果您的项目需要更多流式传输配额,您可以在 Google Cloud 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 参数更改要返回的行数。

BigQuery Storage API 请求

以下限制适用于使用 BigQuery Storage API 进行的 ReadRows 调用:

  • 每分钟调用 ReadRows 的次数:5000 - 使用 BigQuery Storage API 读取数据时,每个项目中每个用户每分钟调用 ReadRows 的次数上限为 5000 次。

以下限制适用于使用 BigQuery Storage API 进行的所有其他方法调用:

  • 每分钟调用 API 的次数:1000 - 每个项目中每个用户每分钟调用 BigQuery Storage API 的次数上限为 1000 次。

何时补充配额?

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

错误代码

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

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

发送以下问题的反馈:

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