可以使用 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。 参见在深度克隆中设置表属性。