你可以使用 DEEP CLONE 建立使用 Iceberg 的受控資料表完整且獨立的副本。 深度克隆會在 Unity Catalog 中使用 Iceberg,將資料檔案和資料表中繼資料複製到新的受控資料表。
使用 Iceberg 的管理資料表只支援深度克隆。 不支援淺層克隆及克隆過程中的格式轉換。
Iceberg 資料表的複製方法
你使用的複製操作取決於你的來源表和目標表類型:
| 來源 | Target | 行動 |
|---|---|---|
| 使用 Iceberg 管理的表格 | 使用 Iceberg 管理的表格 |
DEEP CLONE。 |
| 外國冰山 | 使用 Iceberg 管理的表格 |
DEEP CLONE。 參見「 將外來 Iceberg 資料表複製到使用 Iceberg 的管理資料表」。 |
| 外來冰山 | 管理或外部三角洲湖 | 增量複製。 請參閱 以增量方式將 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 深層複製受管理資料表
使用 Iceberg 的 CREATE TABLE ... DEEP CLONE 複製受管理資料表:
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 的完全受控資料表,且獨立於來源 Catalog。
備註
不支援從外國目錄進行零拷貝遷移。 請參閱限制。
在深層複本上設定表格屬性
你無法在 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。 參見 在深層複製上設定資料表屬性。