表克隆简介

本文档简要介绍了 BigQuery 中的表克隆。本文档适用于熟悉 BigQuery 及 BigQuery 的用户。

表克隆是另一个表(称为“基表”)的可写轻量级副本。您只需为表克隆中与基表不同的数据支付存储费用,因此表克隆最初是没有存储费用的。除了存储空间的结算模式和基表的一些额外元数据之外,表克隆在其他方面与标准表类似,您可以对其执行查询、复制、删除等操作。

表克隆的常见应用场景包括:

  • 创建可用于开发和测试的生产表的副本。
  • 创建沙盒,让用户无需实际复制所有生产数据,即可生成自己的分析和数据操作。系统仅会对更改后的数据计费。

创建表克隆后,它将独立于基表存在。对基表或表克隆所做的任何更改都不会反映在另一方中。

如果您需要表的只读轻量级副本,请考虑使用表快照

表克隆元数据

表克隆具有与标准表相同的元数据,此外还包含以下内容:

  • 表克隆的基表的项目、数据集和名称。
  • 表克隆操作的时间。如果使用时间旅行创建表克隆,那么这就是时间旅行时间戳。

如需了解详情,请参阅 INFORMATION_SCHEMA.TABLES

表克隆操作

通常,使用表克隆的方式与使用标准表相同,包括以下操作:

  • 查询
  • 访问权限控制
  • 获取元数据
  • 分区和聚簇
  • 使用架构
  • 正在删除

但是,表克隆的创建与标准表的创建不同。如需了解详情,请参阅创建表克隆

存储费用

存储费用适用于表克隆,但 BigQuery 仅对表克隆中尚未计入另一个表的数据收费:

  • 创建表克隆后,该表克隆最初是没有存储费用的。

  • 如果在表克隆中添加或更改数据,则需要为添加或更新的数据支付存储费用。

  • 如果在基表中更改或删除了同时也存在于表克隆中的数据,则表克隆也需要为已更改或删除的数据支付存储费用。如果有多个克隆包含已更改或已删除的数据,则您只需为最早的克隆使用的存储空间付费。

  • 如果在创建表克隆之后向基表添加了数据,则表克隆无需为该数据支付存储费用,但您需要为基表支付这些数据费用。

下图显示了基表和表克隆的存储费用之间的差异:

表克隆结算示例

如需了解详情,请参阅 BigQuery 存储价格

限制

  • 您可以在同一项目中的数据集之间以及不同项目中的数据集之间克隆表。但是,表克隆的目标数据集必须与要克隆的表位于同一区域,并属于同一组织。例如,您无法将表从欧盟的数据集克隆到美国的数据集。
  • 您无法为比表数据集的时间旅行时长更晚的表数据创建克隆。
  • 您无法为视图具体化视图创建克隆。
  • 无法为外部表创建克隆。
  • 创建表克隆时,无法覆盖现有表或表克隆。如需了解具体限制,请参阅表命名
  • 如果您克隆的表在写入优化存储空间(最近流式传输行的流缓冲区)中有数据,则写入优化存储空间中的数据不会包含在表中克隆。
  • 如果克隆包含时间旅行中的数据的表,则时间旅行中的数据不会包含在表克隆中。
  • 表克隆无法在浏览器窗格中与标准表区分开来。但是,您可以通过查看表详细信息来区分标准表和表克隆。表克隆的详细信息具有基表信息部分,而标准表没有此部分。
  • 您无法使用克隆操作将数据附加到现有表。例如,您不能在同一 bq cp 命令中使用标志设置 --append_table=true--clone=true。如需在复制表时附加数据,请改用复制操作。
  • 创建表克隆时,其名称必须遵循与创建表相同的命名规则
  • 表克隆的创建受复制作业的 BigQuery 限制约束。
  • 由于底层存储是动态管理的,因此 BigQuery 创建表克隆所花费的时间可能因不同的运行大不相同。

配额和限制

表克隆与标准表具有相同的配额和限制。如需了解详情,请参阅表配额和限制。 它们还具有适用的表克隆限制

后续步骤