克隆托管型 Iceberg 表

可以使用 DEEP CLONE 创建托管 Iceberg 表的完整独立副本。 深度克隆会将数据文件和表元数据一并复制到 Unity Catalog 中的新托管型 Iceberg 表中。

托管型 Iceberg 表仅支持深度克隆。 不支持在克隆期间进行浅表克隆和格式转换。

克隆 Iceberg 表的方法

使用的克隆操作取决于源表和目标表类型:

来源 目标 操作
托管 Iceberg 托管 Iceberg DEEP CLONE
外部 Iceberg 托管 Iceberg DEEP CLONE。 请参阅 将外部 Iceberg 表克隆到托管型 Iceberg
Parquet 或外部 Iceberg 托管或外部 Delta Lake 增量克隆。 请参阅将 Parquet 表和 Apache Iceberg 表增量克隆到 Delta Lake

若要从查询结果创建托管的 Iceberg 表,而不是克隆现有表,请使用 CREATE TABLE ... AS SELECT。 请参阅 CREATE TABLE [USING]

SHALLOW CLONE 不支持 Iceberg 表。 请参阅限制

要求

要深度克隆一个受管 Iceberg 表,您需要:

  • Databricks Runtime 16.4 LTS 或更高版本。
  • 对源表具有 SELECT 权限。
  • 如果要替换现有表,则需要目标架构上的 CREATE TABLE 权限,或目标表上的 MODIFY 权限。
  • 在目标目录或架构上启用预测优化

深度克隆受管 Iceberg 表

使用 CREATE TABLE ... DEEP CLONE 复制托管的 Iceberg 表:

CREATE TABLE <catalog>.<schema>.<target-table>
DEEP CLONE <catalog>.<schema>.<source-table>;

替换现有目标表:

CREATE OR REPLACE TABLE <catalog>.<schema>.<target-table>
DEEP CLONE <catalog>.<schema>.<source-table>;

若目标表尚不存在,则仅创建目标表:

CREATE TABLE IF NOT EXISTS <catalog>.<schema>.<target-table>
DEEP CLONE <catalog>.<schema>.<source-table>;

有关完整 CREATE TABLE CLONE 语法,请参阅 CREATE TABLE CLONE

存档生产表

若要为存档或符合性目的创建生产表的独立快照,请执行以下操作:

CREATE TABLE prod_catalog.archive.orders_snapshot_may2026
DEEP CLONE prod_catalog.main.orders;

将表复制到开发环境

若要将生产表克隆到开发目录中,以便在不影响生产数据的情况下安全地进行试验:

CREATE OR REPLACE TABLE dev_catalog.test.orders
DEEP CLONE prod_catalog.main.orders;

将外部 Iceberg 表克隆为受管 Iceberg 表

您可以使用 DEEP CLONE 将外部 Iceberg 表迁移到 Unity Catalog 中,作为受管 Iceberg 表。 克隆会将所有数据和元数据复制到 Unity 目录存储中。 不会重复使用由外部目录管理的原始文件。

CREATE TABLE <uc-catalog>.<schema>.<target-table>
DEEP CLONE <foreign-catalog>.<schema>.<source-table>;

克隆完成后,目标表将成为 Unity Catalog 中完全受管的 Iceberg 表,与源目录相互独立。

注释

不支持从外部目录进行零复制迁移。 请参阅限制

在深层克隆上设置表属性

不能在 DEEP CLONE 语句中设置 Iceberg 表属性。 若要在克隆表上添加或重写属性,请在克隆完成后使用 ALTER TABLE SET TBLPROPERTIES

例如,若要设置自定义属性以记录用作快照的克隆的源:

CREATE TABLE prod_catalog.archive.orders_snapshot
DEEP CLONE prod_catalog.main.orders;

ALTER TABLE prod_catalog.archive.orders_snapshot
SET TBLPROPERTIES (
  'archive.source' = 'prod_catalog.main.orders',
  'archive.created_date' = '2026-05-11'
);

克隆行为

深层克隆行为的重要注意事项:

  • 深度克隆是源表的完整独立副本。 对克隆的更改不会影响源,对源的更改不会影响克隆。
  • 深层克隆具有独立的快照历史记录。 在克隆上进行时间旅行时,使用的是克隆的历史记录,而不是源对象的历史记录。
  • 架构、分区信息和表属性将复制到深层克隆。 不会复制 Unity 目录标记。
  • 创建后,Unity Catalog 通过预测性优化独立管理该克隆。

限制

  • 受管 Iceberg 表不支持浅克隆。
  • Unity Catalog 不支持将外部 Iceberg 表零拷贝转换为托管 Iceberg 表。 必须使用 DEEP CLONE。 在克隆操作期间,所有数据将复制到 Unity 目录存储。
  • 深度克隆不会复制表历史记录,这会影响时间旅行查询。
  • 克隆期间无法更改表格式。 目标表始终是受管 Iceberg 表。
  • 无法在克隆期间设置表属性。 深度克隆完成后使用 ALTER TABLE SET TBLPROPERTIES 。 参见在深度克隆中设置表属性