BigQuery 价格

如需了解 BigQuery 价格,请参阅本页面。

如需了解 BigQuery ML 价格,请参阅 BigQuery ML 价格页面。

如需了解 BigQuery Data Transfer Service 价格,请参阅 BigQuery Data Transfer Service 价格页面。

概览

BigQuery 提供灵活的价格选项,可以根据您的技术需求与预算进行调整。

存储费用按 BigQuery 中存储的数据量收取,可能采用以下模式:

  • 活跃 - 对过去 90 天内修改过的表或分区中存储的数据收取的月度费用。
  • 长期 - 对过去 90 天内未修改过的表或分区中存储的数据收取的较低月度费用。

对于查询费用,您可以在下面两种价格模式之间进行选择:

  • 按需价格 - 这是最灵活的选项。按需价格模式根据您运行的每个查询处理的数据量计费。
  • 固定价格 - 这种可预测的价格选项最适合具有固定预算的客户。固定价格客户购买专用资源进行查询处理,无需按具体查询付费。

如需详细了解存储和查询价格,请参阅 Google Cloud Platform SKU。请注意,按需查询价格在 SKU 页面上被称为分析价格。

价格摘要

下表汇总了 BigQuery 的价格。表中所述的操作受 BigQuery 配额和限制的约束。

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
操作 价格 详情
活跃存储 每月前 10 GB 免费。详情请参阅存储价格
长期存储 每月前 10 GB 免费。详情请参阅存储价格
BigQuery Storage API BigQuery Storage API 不在免费层级的涵盖范围内。
流式插入 您需要为成功插入的行支付费用。单行最小计为 1 KB。详情请参阅流式插入价格
查询(按需价格) 每月前 1 TB 免费,详情请参阅按需价格
查询(每月固定价格) 您能以 500 个槽为单位购买更多槽。如需了解详情,请参阅每月固定价格
查询(每年固定价格) 您能以 500 个槽为单位购买更多槽。费用按月结算。如需了解详情,请参阅每年固定价格

如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。

费用结算方式

您创建的每个项目都有与之关联的结算帐号。由项目中运行的 BigQuery 作业(如查询作业)产生的任何费用均会计入关联的结算帐号,即使与组织外的其他人共享了项目资源也是如此。BigQuery 存储费用也会计入关联的结算帐号。

如何分析结算数据

您可以在 GCP Console 中的 Cloud Billing 报告页面查看 BigQuery 费用和趋势。如需了解如何使用报告来分析结算数据,请参阅借助结算报告查看您的费用趋势

如需了解如何在 BigQuery 中分析您的结算数据,请参阅 Cloud Billing 文档中的将结算数据导出到 BigQuery

免费操作

下表列出了我们为每个位置提供的免费 BigQuery 操作。这些操作受 BigQuery 配额和限制的约束。

操作 详情
加载数据

在将 Cloud Storage 中的数据加载到 BigQuery 中时,您不需要为加载操作支付费用,但需要支付在 Cloud Storage 中存储数据的费用。如需了解详情,请参阅 Cloud Storage 价格页面上的数据存储。数据一旦加载到 BigQuery 中,就会按照 BigQuery 的存储价格计费。如需了解详情,请参阅将数据加载到 BigQuery 中

在 BigQuery 中创建数据集时,您必须为数据选择一个位置。如果您选择 US,则可以将来自其他任何区域的 Cloud Storage 存储分区的数据加载到该数据集所含的表中。目前,将来自其他区域的数据加载到位置为美国的数据集时,系统不会对互联网出站流量收费。

如果您选择的位置不是 US,则您必须执行以下操作之一:

  • 从该区域的 Cloud Storage 存储分区加载数据(此存储分区可以是一个多区域型存储分区,也可以是数据集所在区域的一个区域型存储分区)
  • 将数据复制到该区域的一个存储分区中

如果您将某个 Cloud Storage 区域的数据复制到另一个 Cloud Storage 区域,则系统会按 Cloud Storage 网络流量价格收费。

复制数据 您不需要为复制表的操作支付费用,但需要支付新表和所复制表的存储费用。如需了解详情,请参阅复制现有的表
导出数据 在将 BigQuery 中的数据导出到 Cloud Storage 时,您不需要为导出操作支付费用,但需要支付 Cloud Storage 的数据存储费用。如需了解详情,请参阅 Cloud Storage 价格页面上的数据存储,以及从 BigQuery 导出数据
删除数据集 您不需要为删除数据集的操作支付费用。
删除表、视图、分区和函数 您不需要为删除表、视图、各个表分区或用户定义函数的操作支付费用。
元数据操作 您不需要为 list、get、patch、update 和 delete 调用支付费用。示例包括(但不限于):列出数据集、更新数据集的访问控制列表、更新表的说明或列出数据集中的用户定义函数。
读取伪列 您不需要为查询以下伪列支付费用。

_TABLE_SUFFIX - 在查询通配符表时使用,或用于在标准 SQL 中实现表修饰器语义
_PARTITIONDATE - 在查询按提取时间分区的表时使用
_PARTITIONTIME - 在查询按提取时间分区的表时使用
_FILE_NAME - 在查询基于外部数据源的表时使用
读取元表 您无需为查询下列元表支付费用:

__PARTITIONS_SUMMARY__ - 用于获取分区表或按提取时间分区的表中分区的相关元数据
__TABLES_SUMMARY__ - 用于获取数据集中表和视图的相关元数据
创建、替换或调用 UDF 您无需为创建、替换或调用永久性用户定义函数 (UDF) 支付费用。永久性 UDF 目前为测试版;价格可能会发生变化。

“始终免费”用量限制

作为 Google Cloud Platform 免费层级的一部分,BigQuery 提供了一些免费资源,但用量不能超过特定限额。这些免费资源的用量限额在免费试用期间及试用结束后均有效。如果超过这些用量限额且免费试用期已过,您将需要根据本页中列出的价格支付费用。

资源 每月免费用量上限 详情
存储 每月前 10 GB 数据免费。 存储在 BigQuery 中的 BigQuery ML 模型和训练数据会计入 BigQuery 存储服务的免费层级。
查询(分析) 每月处理的前 1 TB 查询数据免费。 使用 BigQuery ML 预测、检查和评估功能的查询会计入 BigQuery 分析服务的免费层级。包含 CREATE MODEL 语句的 BigQuery ML 查询不计入免费层级。
BigQuery 还为那些希望月度费用稳定在一定水平的高用量客户提供固定价格
BigQuery ML CREATE MODEL 查询 包含 CREATE MODEL 语句的查询每月处理的前 10 GB 数据免费。 BigQuery ML CREATE MODEL 查询不计入 BigQuery 分析服务的免费层级。

查询价格

查询价格是指运行您的 SQL 命令和用户定义函数以及限定的数据操纵语言 (DML)数据定义语言 (DDL) 语句而产生的费用。

BigQuery 提供两种价格模式供您选择:

  • 按需价格模式灵活而高效,您只需为运行的查询付费。
  • 固定价格模式提供可预测且一致的月度费用。

默认情况下,系统以按需价格模式结算。您可以根据自己的需求选择相应的价格模式。您还可以为每个项目和每个位置混合搭配两种价格模式。

按需价格

在按需价格模式下,BigQuery 按处理的字节数(也称为读取的字节数)收取查询费用。无论您是将数据存储在 BigQuery 中,还是存储在外部数据源(例如 Cloud Storage、Google 云端硬盘或 Cloud Bigtable)中,我们都会根据处理的字节数向您收取费用。按需价格仅按用量计算。

按需查询价格如下所示:

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
操作 价格 详情
查询(按需价格) 每月前 1 TB 免费。 如果客户的查询量较大,并且更倾向于每月支付稳定的费用,则也可选择固定价格

如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。

请注意以下有关查询费用的事项:

  • BigQuery 使用列式数据结构。我们会根据您选择的列中处理的总数据量向您收费,而每列的总数据量是基于该列中的数据类型计算的。如需详细了解我们如何计算您的数据大小,请参阅数据大小计算
  • 您不需要为返回错误的查询或从缓存中检索结果的查询付费。
  • 系统在计算费用时会四舍五入到最接近的 MB 数,查询引用的每个表所处理的数据至少计为 10 MB,每个查询所处理的数据也至少计为 10 MB。
  • 取消正在运行的查询作业可能会产生费用,费用最高可达正常完成查询所需的全部费用。
  • 在运行查询时,即使您对结果数量设置了明确的 LIMIT,我们也会根据您选择的列中处理的数据量向您收费。
  • 对表进行分区聚簇有助于减少查询处理的数据量。分区和聚簇是最佳做法,请尽量加以使用。
  • 按需查询价格在 Google Cloud Platform SKU 页面上被称为分析价格。

按需查询费用控制机制

BigQuery 提供了费用控制机制,可让您为查询费用设置上限。您可以进行如下设置:

固定价格

BigQuery 为具备以下特点的客户提供了固定价格模式:他们更希望按月支付稳定的查询费用,而不是根据处理的数据量(TB 数)以按需计费方式支付费用。

如果您注册了固定价格方案,则可以购买专用的查询处理容量(以 BigQuery 数为单位)。处理的所有字节的费用都包含在每月固定价格中。如果您的查询超出了固定价格容量,那么查询会按比例调节运行速度,使之以更慢的速度运行,直至有更多固定价格资源可用为止。

固定价格:

  • 只涵盖查询费用,包括 DML 和 DDL 语句。
  • 不涵盖存储费用。如需详细了解存储费用,请参阅存储价格
  • 作为区域资源购买。在一个区域购买的固定价格容量无法在另一个区域使用。
  • 客户可以联系 Google Cloud Platform 支持团队提高每个项目的并发配额。
  • 可选择月度合约和年度合约。

固定价格详情

如果您注册了固定价格方案:

  • 对于月度合约,不可在购买确认日期起的 30 个日历日内取消或降级。

    在最初的 30 个日历日之后,您可以随时取消或降级。取消或降级后,您需要基于每月费率按秒付费。

    例如:

    • 您不可在第 29 天取消。
    • 如果您在第 31 天的头一秒钟取消,则需要支付 30 天零 1 秒的费用。
    • 如果您在第三个月刚过一半时取消,则需要为该月支付每月费率的 50%。
  • 对于年度合约,不可在一个日历年内取消或降级。

    在您的合约日期的周年日之前,您可以选择续订一年,也可以转为每月固定价格方案(此价格方案在该年度结束后生效)。转为每月费率后,您可以随时取消,取消后需基于每月费率按秒付费。

    例如:

    • 如果在年度合约日期之后续订一年,那么您需要签署新的年度合约,并继续按年度合约费率付费。
    • 如果在年度合约日期之后不再续订一年,则可以随时取消,取消后需基于每月费率按秒付费。
  • 要购买更多 BigQuery 槽,您必须签署新合约。

  • 购买的固定价格方案仅适用于特定的 BigQuery 位置
    在购买固定价格方案时,您需要按位置指定槽的分配方式。如需在多个位置使用槽,则必须在各个位置分别购买槽。
  • 固定价格和按需价格可以一起使用
    一个项目可以选择使用固定价格或按需价格。如果在一个位置有多个项目,您可以选择哪些项目使用固定价格,哪些项目使用按需价格。
  • 如需中止固定价格方案,您必须取消或降级合约。

每月固定价格

如果您注册了固定价格方案,您购买的容量将以 BigQuery 槽数为单位。下表显示了在您购买每月固定价格方案后为您分配的槽数。

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
每月费用 槽数
500

如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。

每年固定价格

如果您注册了固定价格方案,您购买的容量将以 BigQuery 槽数为单位。下表显示了在您购买每年固定价格方案后为您分配的槽数。注册了每年固定价格方案后,您需要按月付费。

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
每月费用 槽数
500

如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。

目前,这种通过月度合约和年度合约购买槽的方式处于 Alpha 测试阶段。要参与 Alpha 测试,请填写此表单

对于希望继续使用现有固定价格方案的客户,不存在任何变化。要继续使用现有的固定价格方案,请与您的销售代表联系。

存储价格

数据一旦加载到 BigQuery 中,您就需要支付相关的存储费用。存储价格基于您表中所存储的数据量(在未压缩的情况下)计算。

数据大小根据各列的数据类型计算。如需详细了解我们如何计算数据大小,请参阅数据大小计算

活跃存储

活跃存储费用如下所示:

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
存储类型 价格 详情
活跃存储 每月免费存储前 10 GB。

如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。

存储价格基于每秒每 MB 的价格按比例计算。例如,如果您的存储情况如下:

  • 存储 100 MB 半个月,则需要支付 $0.001(十分之一美分)
  • 存储 500 GB 半个月,则需要支付 $5
  • 存储 1 TB 一整月,则需要支付 $20

长期存储

如果一个表连续 90 天未发生修改,则该表的存储价格会自动下降 50% 左右。某表被视为长期存储后,不会出现性能、耐用性、可用性方面和任何其他功能的降级。

长期存储价格如下所示:

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
存储类型 价格 详情
长期存储 每月免费存储前 10 GB。

如果表发生了修改,价格会恢复到常规的存储价格,且 90 天连续未修改时间的计时器从零开始重新计数。对表中数据进行任何修改都会重置该计时器,包括:

操作 详情
将数据加载到表中 通过任何加载或查询作业将数据附加到目标表或覆盖目标表。
将数据复制到表中 通过任何复制作业将数据附加到目标表或覆盖目标表。
将查询结果写入表中 通过任何查询作业将数据附加到目标表或覆盖目标表。
使用数据操纵语言 (DML) 使用 DML 语句修改表数据。
使用数据定义语言 (DDL) 使用 `CREATE OR REPLACE TABLE` DDL 语句替换表。
将数据流式插入到表中 使用 tabledata.insertAll API 调用来提取数据。

其他所有操作均不会重置计时器,包括:

  • 查询表
  • 创建表查询视图
  • 从表中导出数据
  • 复制表(至另一个目标表)
  • 修补或更新表资源

对于分区表,它的每一个分区都会被视为单独的个体来考虑是否适用长期存储价格。如果某个分区在过去 90 天内未被修改,则该分区中的数据将被视为长期存储并按折扣价计费。

对于在结算周期内达到 90 天阈值的表,我们会相应地按比例计算其价格。

长期存储价格仅适用于 BigQuery 存储,不适用于外部数据源中存储的数据,这些数据源包括 Cloud Bigtable、Cloud Storage 和 Google 云端硬盘等。

BigQuery Storage API 价格

BigQuery Storage API 采用按需价格模式。您需要为读取的数据量付费。采用固定价格模式的客户每月最多可以使用 BigQuery Storage API 免费读取 300 TB 的数据。对于每月超过 300 TB 额度的部分,系统将按照按需费率进行计费。

按需价格

在按需价格模式下,您的 BigQuery Storage API 费用基于调用 ReadRows 从 BigQuery 存储空间读取的字节数计算。

读取的字节数包括用于过滤但未作为 ReadRows 输出返回给您的数据。从临时表中读取数据不需要付费。

BigQuery Storage API 的按需费用如下所示:

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
价格 详情
BigQuery Storage API 不在免费层级的涵盖范围内。

如果您使用非美元货币付费,请参阅 Cloud Platform SKU 上以您的币种列出的价格。

请注意以下与 BigQuery Storage API 费用有关的事项:

  • 您需要根据读取的数据总量付费。读取的每列数据总量是根据列中数据的类型计算的,而数据的大小是根据列的数据类型计算的。如需详细了解数据大小的计算方式,请参阅数据大小计算
  • 即使 ReadRows 调用失败,您也需要为读取会话中读取的所有数据付费。
  • 如果您在数据流传输完毕之前取消 ReadRows 调用,则需要为取消前读取的所有数据付费。您的费用可能包括取消 ReadRows 调用之前已读取但未返回给您的数据。
  • 对表进行分区和聚簇是最佳做法,请尽量加以使用。您可以使用 WHERE 子句来剪除分区,以减少读取的数据量。如需了解详情,请参阅查询分区表

数据大小计算

当您将数据加载到 BigQuery 中或查询数据时,我们会根据数据大小向您收取费用。数据大小是基于每个列的数据类型的大小计算的。

所存储数据的大小以及您的查询所处理的数据大小以千兆字节 (GB) 为单位计算,其中 1 GB 为 230 个字节。此计量单位也称为吉比字节 (GiB)。与之类似,1 TB 为 240 个字节 (1024 GB)。

BigQuery 的数据类型的大小如下所示:

数据类型 大小
INT64/INTEGER 8 个字节
FLOAT64/FLOAT 8 个字节
NUMERIC 16 个字节
BOOL/BOOLEAN 1 个字节
STRING 2 个字节 + UTF-8 编码字符串大小
BYTES 2 个字节 + 值中的字节数
DATE 8 个字节
DATETIME 8 个字节
TIME 8 个字节
TIMESTAMP 8 个字节
STRUCT/RECORD 0 个字节 + 包含的字段的大小
GEOGRAPHY 16 个字节 + 24 个字节 * geography 类型的数据中的顶点数量(您可以使用 ST_NumPoints 函数验证顶点数量)

所有数据类型的 null 值均计为 0 个字节。

重复列以数组形式存储,大小根据值的数量计算。例如,如果整数列 (INT64) 重复 (ARRAY<INT64>) 且包含 4 个条目,则系统会将该列计算为 32 个字节(即 4 个条目 x 8 个字节)。

流式插入价格

您可以免费将数据加载到 BigQuery 中,但需要为流式插入的数据支付少许费用。

流式插入的价格如下所示:

美国(多区域) 欧盟(多区域) 洛杉矶 (us-west2) 蒙特利尔 (northamerica-northeast1) 北弗吉尼亚 (us-east4) 圣保罗 (southamerica-east1) 芬兰 (europe-north1) 伦敦 (europe-west2) 苏黎世 (europe-west6) 香港 (asia-east2) 孟买 (asia-south1) 台湾 (asia-east1) 东京 (asia-northeast1) 新加坡 (asia-southeast1) 悉尼 (australia-southeast1)
按月
操作 价格 详情
流式插入 您需要为成功插入的行支付费用。单行最小计为 1 KB。

数据操纵语言 (DML) 价格

BigQuery 会根据 DML 查询处理的字节数收取查询费用。

针对非分区表的 DML 价格

对于非分区表,处理的字节数按如下方式计算:

DML 语句 处理的字节数
INSERT 执行查询而扫描表时,对表引用的所有列进行处理的总字节数。
UPDATE 执行查询时所扫描的表引用的所有列包含的总字节数
+ UPDATE 开始时所更新的表中所有列的总字节数。
DELETE 执行查询时所扫描的表引用的所有列包含的总字节数
+ DELETE 开始时所修改的表中所有列的总字节数。
MERGE 如果 MERGE 语句中仅包含 INSERT 子句,您需要支付的费用取决于执行查询而扫描表时,对扫描的全部表引用的所有列进行处理的总字节数。
如果 MERGE 语句中包含 UPDATEDELETE 子句,则您需要支付的费用取决于执行查询而扫描源表时,对源表引用的所有列进行处理的总字节数
MERGE 开始时目标表中所有列的总字节数之和。

针对分区表的 DML 价格

对于分区表,处理的字节数按如下方式计算:

DML 语句 处理的字节数
INSERT 执行查询而扫描所有分区时,对分区中引用的所有列进行处理的总字节数。
UPDATE 对执行查询时扫描的表的所有分区中引用的所有列处理的总字节数
+ UPDATE 开始时所更新表的更新或扫描分区中所有列的总字节数。
DELETE 对执行查询时扫描的表的所有分区中引用的所有列处理的总字节数
+ DELETE 开始时所修改表的修改或扫描分区中所有列的总字节数。
MERGE 如果 MERGE 语句中仅包含 INSERT 子句,您需要支付的费用取决于执行查询而扫描分区时,对扫描的所有分区引用的所有列进行处理的总字节数。
如果 MERGE 语句中包含 UPDATEDELETE 子句,则您需要支付的费用取决于执行查询而扫描源表时,对源表的所有分区中引用的所有列进行处理的总字节数
MERGE 开始时目标表的更新、删除或扫描分区中所有列的总字节数之和。

数据定义语言 (DDL) 价格

BigQuery 会根据 DDL 查询处理的字节数收取查询费用。对于 DDL 语句,处理的字节数按如下方式计算:

DDL 语句 处理的字节数
CREATE TABLE 无。
CREATE TABLE ... AS SELECT ... 执行查询而扫描表时,对表引用的所有列进行处理的总字节数。
CREATE VIEW 无。
DROP TABLE 无。
DROP VIEW 无。

聚簇表价格

在 BigQuery 中创建和使用聚簇表时,您要支付的费用取决于表中存储的数据量以及您对数据执行的查询。聚簇表可通过剪除数据来使这些数据不会被查询处理,从而帮助您降低查询费用。此过程称为块剪除。

块剪除

BigQuery 会根据聚簇列中的值对聚簇表中的数据排序,并以块的形式整理这些数据。

当您提交包含对聚簇列进行过滤的查询时,BigQuery 会使用聚簇信息高效地确定某个块是否包含与查询相关的任何数据。这样一来,BigQuery 就可以仅扫描相关块(此过程称为块剪除)。

查询价格基于处理的字节数。如果您对聚簇表运行查询,并且此查询包含针对聚簇列的过滤条件,则 BigQuery 会使用过滤条件表达式和块元数据来剪除查询要扫描的块。

当某个块被剪除后,系统不会对其进行扫描。只有经过扫描的块才会用于计算查询所处理的数据量(以字节为单位)。对聚簇表运行的查询所处理的字节数等于在所扫描的块内从该查询引用的每个列中读取的字节总数。

如果聚簇表在使用了多个过滤条件的查询中被引用了多次,则 BigQuery 会分别收取各个过滤条件下相应块中列的扫描费用。

BigQuery 价格示例

估算查询费用

如需查询价格示例,请参阅估算查询费用

估算存储费用

如需存储价格示例,请参阅估算存储费用

针对非分区表的 DML 价格示例

以下示例演示了 BigQuery 如何计算 DML 语句在修改非分区表时所读取的字节数。

示例 1:对非分区表调用 UPDATE 语句

table1 包含两列:col1(类型为 INTEGER)和 col2(类型为 STRING)。

UPDATE table1 SET col1 = 1 WHERE col2 = 2;

本例中处理的字节数 =

  • col1 中的总字节数 +
  • col2 中的总字节数

示例 2:对非分区表调用 UPDATE 语句

table1 包含两列:col1(类型为 INTEGER)和 col2(类型为 STRING)。table2 包含一列:field1(类型为 INTEGER)。

UPDATE table1 SET col1 = 1 WHERE col1 in (SELECT field1 from table2)

本例中处理的字节数 =

  • UPDATE 开始之前 table1.col1 中的总字节数 +
  • UPDATE 开始之前 table1.col2 中的总字节数 +
  • table2.field1 中的总字节数

针对分区表的 DML 价格示例

以下示例演示了 BigQuery 如何计算 DML 语句在修改按提取时间分区的表时所读取的字节数。要查看示例中所用表的 JSON 架构表示形式,请参阅“使用 DML 语句更新分区表数据”页面上的示例使用的表

示例 1:对按提取时间分区的表调用 INSERT 语句

mytable2 包含两列:id(类型为 INTEGER)和 ts(类型为 TIMESTAMP)。mytable 包含两列:field1(类型为 INTEGER)和 field2(类型为 STRING)。

INSERT INTO mytable (_PARTITIONTIME, field1) AS SELECT TIMESTAMP(DATE(ts)), id from mytable2

本例中处理的字节数 =

  • mytable2.ts 中的总字节数 +
  • mytable2.id 中的总字节数

将要插入行的表 (mytable) 的大小不会影响查询费用。

示例 2:对分区表调用 INSERT 语句

mytable2 包含两列:id(类型为 INTEGER)和 ts(类型为 TIMESTAMP)。mycolumntable 包含四列:field1(类型为 INTEGER)、field2(类型为 STRING)、field3(类型为 BOOLEAN)和 ts(类型为 TIMESTAMP)。

INSERT INTO mycolumntable (ts, field1) AS SELECT ts, id from mytable2

本例中处理的字节数 =

  • mytable2.ts 中的总字节数 +
  • mytable2.id 中的总字节数

将要插入行的表 (mycolumntable) 的大小不会影响查询费用。

示例 3:对按提取时间分区的表调用 UPDATE 语句

DML 语句 1:更新单个分区

mytable2 包含两列:id(类型为 INTEGER)和 ts(类型为 TIMESTAMP)。mytable 包含两列:field1(类型为 INTEGER)和 field2(类型为 STRING)。

UPDATE project.mydataset.mytable T SET T.field1 = T.field1 + 100 WHERE T._PARTITIONTIME = TIMESTAMP(“2017-05-01”) AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

本例中处理的字节数 =

  • mytable2.id 中的总字节数 +
  • “2017-05-01”分区内 mytable.field1 中的总字节数 +
  • “2017-05-01”分区内 mytable.field2 中的总字节数

DML 语句 2:根据表的一个分区更新另一个分区

UPDATE project.mydataset.mytable T SET T._PARTITIONTIME = TIMESTAMP(“2017-06-01”), T.field1 = T.field1 + 100 WHERE T._PARTITIONTIME = TIMESTAMP(“2017-05-01”) AND EXISTS (SELECT 1 from project.mydataset.mytable S WHERE S.field1 = T.field1 AND S._PARTITIONTIME = TIMESTAMP("2017-06-01") )

本例中处理的字节数 =

  • “2017-05-01”分区内 mytable.field1 中的总字节数 +
  • “2017-05-01”分区内 mytable.field2 中的总字节数 +
  • “2017-06-01”分区内 mytable.field1 中的总字节数 +
  • “2017-06-01”分区内 mytable.field2 中的总字节数

在本例中,UPDATE 语句的费用取决于“2017-05-01”和“2017-06-01”所对应的分区中所有字段的大小总和。

示例 4:对分区表调用 UPDATE 语句

DML 语句 1:更新单个分区

mytable2 包含两列:id(类型为 INTEGER)和 ts(类型为 TIMESTAMP)。mycolumntable 包含四列:field1(类型为 INTEGER)、field2(类型为 STRING)、field3(类型为 BOOLEAN)和 ts(类型为 TIMESTAMP)。

UPDATE project.mydataset.mycolumntable T SET T.field1 = T.field1 + 100 WHERE DATE(T.ts) = “2017-05-01” AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

本例中处理的字节数 =

  • mytable2.id 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field1 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field2 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field3 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.ts 中的总字节数

DML 语句 2:根据表的一个分区更新另一个分区

UPDATE project.mydataset.mycolumntable T SET T.ts = TIMESTAMP(“2017-06-01”), T.field1 = T.field1 + 100 WHERE DATE(T.ts) = “2017-05-01” AND EXISTS (SELECT 1 from project.mydataset.mycolumntable S WHERE S.field1 = T.field1 AND DATE(S.ts) = "2017-06-01")

本例中处理的字节数 =

  • “2017-05-01”分区内 mycolumntable.field1 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field2 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field3 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.ts 中的总字节数 +
  • “2017-06-01”分区内 mycolumntable.field1 中的总字节数 +
  • “2017-06-01”分区内 mycolumntable.field2 中的总字节数 +
  • “2017-06-01”分区内 mycolumntable.field3 中的总字节数 +
  • “2017-06-01”分区内 mycolumntable.ts 中的总字节数

在本例中,UPDATE 语句的费用取决于“2017-05-01”和“2017-06-01”所对应的分区中所有字段的大小总和。

示例 5:对按提取时间分区的表调用 DELETE 语句

mytable2 包含两列:id(类型为 INTEGER)和 ts(类型为 TIMESTAMP)。mytable 包含两列:field1(类型为 INTEGER)和 field2(类型为 STRING)。

DELETE project.mydataset.mytable T WHERE T._PARTITIONTIME = TIMESTAMP(“2017-05-01”) AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

本例中处理的字节数 =

  • mytable2.id 中的总字节数 +
  • “2017-05-01”分区内 mytable.field1 中的总字节数 +
  • “2017-05-01”分区内 mytable.field2 中的总字节数

示例 6:对分区表调用 DELETE 语句

mytable2 包含两列:id(类型为 INTEGER)和 ts(类型为 TIMESTAMP)。mycolumntable 包含四列:field1(类型为 INTEGER)、field2(类型为 STRING)、field3(类型为 BOOLEAN)和 ts(类型为 TIMESTAMP)。

DELETE project.mydataset.mycolumntable T WHERE DATE(T.ts) =“2017-05-01” AND EXISTS (SELECT S.id from project.mydataset.mytable2 S WHERE S.id = T.field1)

本例中处理的字节数 =

  • mytable2.id 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field1 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field2 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.field3 中的总字节数 +
  • “2017-05-01”分区内 mycolumntable.ts 中的总字节数

聚簇表价格示例

您有一个名为 ClusteredSalesData 的聚簇表。该表按 timestamp 列分区,并按 customer_id 列聚簇。数据整理到下面这些块中:

分区标识符 块 ID 块中 customer_id 的最小值 块中 customer_id 的最大值
20160501 B1 10000 19999
20160501 B2 20000 24999
20160502 B3 15000 17999
20160501 B4 22000 27999

您对该表运行以下查询。此查询包含对 customer_id 列应用的过滤条件。

SELECT
  SUM(totalSale)
FROM
  `mydataset.ClusteredSalesData`
WHERE
  customer_id BETWEEN 20000
  AND 23000
  AND DATE(timestamp) = "2016-05-01"

此查询执行以下操作:

  • 扫描 B2 和 B4 块中的 timestampcustomer_idtotalSale 列。
  • 剪除 B3 块,因为在 timestamp 分区列上应用了 DATE(timestamp) = "2016-05-01" 过滤条件谓语。
  • 剪除 B1 块,因为在 customer_id 聚簇列上应用了 customer_id BETWEEN 20000 AND 23000 过滤条件谓语。
此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

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