Important
這項功能目前處於 公開預覽版。
Important
淺層克隆支援在 Unity Catalog 管理的資料表和外部資料表之間有所不同。 管理資料表使用 Databricks Runtime 13.3 LTS 及以上版本,外部資料表則使用 Databricks Runtime 14.3 LTS 及以上版本。
您只能將 Unity 目錄受控數據表複製到 Unity 目錄受控數據表,並將 Unity 目錄外部數據表複製到 Unity 目錄外部數據表。
VACUUM Managed 和外部數據表的行為不同。 請參見 Unity Catalog 淺層克隆的使用VACUUM。
使用淺層複製建立具有獨立於來源資料表存取控制權限的 Unity 目錄資料表,且不複製底層資料檔案。 Unity 目錄中的淺克隆僅支援 Delta Lake 資料表。 你無法建立 Iceberg 或其他非 Delta 表格的淺層複製。
關於如何複製資料表的資訊,請參閱 Azure Databricks 上的複製資料表。
建立一個由 Unity Catalog 管理的淺層克隆
在 Unity Catalog 中建立一個淺層的受管理資料表克隆。
CREATE TABLE <catalog-name>.<schema-name>.<target-table-name>
SHALLOW CLONE <catalog-name>.<schema-name>.<source-table-name>
要在 Unity Catalog 上建立受管理的淺層克隆,您必須對來源資源和目標資源擁有以下權限。
| 資源 | 所需權限 |
|---|---|
| 來源架構 | USE SCHEMA |
| 來源目錄 | USE CATALOG |
| 目標架構 |
USE SCHEMA、CREATE TABLE |
| 目標目錄 | USE CATALOG |
就像其他建立資料表的語句一樣,當你執行 SHALLOW CLONE時,你擁有目標資料表。 複製目標資料表的擁有者可獨立於來源資料表控制該資料表的存取權限。 克隆資料表的擁有者可能和來源資料表的擁有者不同。
建立 Unity Catalog 外部的淺層複製
透過指定一個外部位置來建立 Unity Catalog 的外部淺層克隆。
CREATE TABLE <catalog-name>.<schema-name>.<target-table-name>
SHALLOW CLONE <catalog-name>.<schema-name>.<source-table-name>
LOCATION 's3://<bucket-name>/<path-name>/<target-table-name>'
要在 Unity Catalog 建立外部淺層克隆,您必須對來源資源和目標資源擁有以下權限。
| 資源 | 所需權限 |
|---|---|
| 來源架構 | USE SCHEMA |
| 來源目錄 | USE CATALOG |
| 目標架構 |
USE SCHEMA、CREATE TABLE |
| 目標目錄 | USE CATALOG |
| 目標外部位置 | CREATE EXTERNAL TABLE |
在標準存取模式下處理淺克隆表格
若要以標準存取模式(前稱共用存取模式)查詢淺層複製,您必須對該資料表及包含該資料表的資源具有下列權限:
| 資源 | 所需權限 |
|---|---|
| Catalog | USE CATALOG |
| Schema | USE SCHEMA |
| Table | SELECT |
你也必須在複製操作的目標上擁有 MODIFY 執行以下操作的權限:
INSERTDELETEUPDATEMERGECREATE TABLEDROP TABLE
在專用存取模式中使用淺層複製數據表
在專用存取模式(過去稱為單一使用者存取模式)使用 Unity Catalog 淺克隆時,必須同時擁有複製資料表原始資料和目標資料表的資源權限。
對於簡單查詢,除了必須具備目標資料表上的必要權限外,您還必須具備來源目錄和結構描述欄位上的 USE 權限,以及來源資料表上的 SELECT 權限。 對於任何更新或插入記錄到目標資料表的查詢,你也必須對來源資料表擁有 MODIFY 權限。
Databricks 建議在計算時使用標準存取模式的 Unity 目錄複製,因為這允許獨立變更 Unity 目錄淺層複製目標及其來源資料表的權限。
使用 Unity Catalog 進行淺層複製VACUUM
當您針對淺層複製作業的來源和目標使用 Unity 目錄數據表時,Unity 目錄會管理基礎數據檔,以改善複製作業來源和目標的可靠性。 對淺層複製的來源執行 VACUUM 不會破壞已複製的資料表。
一般而言,當識別指定保留閾值的有效檔案時 VACUUM ,只會考慮目前數據表的元數據。 然而,Unity Catalog 的淺層克隆支援會追蹤所有克隆資料表與來源資料檔案之間的關係,因此有效檔案會擴充為包含用於回傳淺克隆資料表與來源資料表查詢所需的資料檔案。
對於 Unity Catalog 淺層複製上的 VACUUM,有效的資料檔案是指位於來源資料表或任何複製資料表之指定保留期限門檻內的任何檔案。 受管理資料表和外部資料表的行為略有不同。
這種增強的中繼資料追蹤改變了 VACUUM 作業影響 Delta Lake 資料表底層資料檔案的方式,其行為如下:
- 對於受管理的資料表,
VACUUM對淺層複製操作的來源或目標進行操作,可能會刪除來源資料表中的資料檔案。 - 針對外部數據表,只有在對源數據表執行時,
VACUUM作業才會從源數據表中移除數據檔。 - 只有未被視為對於源表或任何針對源表的淺層克隆有效的數據文件才會被移除。
- 如果針對單一源數據表定義多個淺層複製品,則在任何複製數據表上執行
VACUUM並不會移除其他複製數據表的有效數據檔。
備註
Databricks 建議您絕不要在保留設定少於 7 天的情況下執行 VACUUM,以避免損毀仍在進行中的長時間執行事務。 如果您需要較低的保留門檻,請考量 VACUUM 在 Unity Catalog 中的淺層複製上與 VACUUM 對 Azure Databricks 上其他複製資料表的影響有何不同。 欲了解更多資訊,請參閱 Azure Databricks 上的資料表複製。
即使你刪除了淺層複製資料表,你仍可能需要具有 SELECT 該淺層複製資料表的存取權限,才能對基礎資料表執行 VACUUM。 Databricks 會讀取淺層複製者的 Delta 日誌,確認複製人仍在參考哪些基底資料表資料檔案,然後再進行真空處理。 Databricks 在刪除淺層複製資料表後,會保留此連結 7 天,以支援 UNDROP 作業。 但在標準存取模式下,此權限並非必需。
捨棄淺層複製的基底表格
即使 Unity Catalog 管理的基底表仍然有活的淺克隆會引用,你也可以丟棄它。 克隆會持續讀取,直到基礎資料表的資料檔案被刪除,導致它們無法使用。 你可以在恢復期間還原基表 UNDROP ,預設為 7 天,且可在目錄或結構層級設定為 0(以停用復原)或 7 至 30 天。 設定復原期間目前已 進入公開預覽階段。 如果你不還原資料表,非同步清除程序會在恢復期結束後刪除資料檔案,讓複製人在基礎資料表無法復原後仍能繼續讀取一段時間。 要恢復掉落的基表,請使用 UNDROP。
備註
某些工作區會對具有淺層複製的基礎資料表強制執行刪除時保護。 如果在此類基礎資料表上執行 DROP TABLE 時因 CANNOT_DROP_BASE_TABLE_REFERENCED_BY_SHALLOW_CLONE 錯誤而失敗,表示你的工作區會強制套用此保護機制。 若仍要刪除基底表,請使用 DROP TABLE ... FORCE。 刪除帶有 FORCE 的基底表會使參照它的淺層複本失效。 克隆在讀取資料或元資料(例如 SELECT、 INSERT、 UPDATEDESCRIBE HISTORY、 CLONE) 的操作中會失敗,但對中繼資料層級的操作(例如 SHOW TABLES、 DROP TABLE)仍可見,方便你清理它們。 此保護僅適用於 Unity 目錄管理的資料表。
Limitations
- 只有 Delta Lake 資料表支援淺層複製。 你無法建立 Iceberg 或其他非 Delta 表格的淺層複製。
- 你無法使用
CREATE OR REPLACE來覆寫現有的淺層複本。 請使用DROP TABLE後接CREATE TABLE,或使用新的表格名稱。 - 外部資料表上的淺層複製必須是外部資料表。 受控數據表上的淺層複製必須是受控數據表。
- 你不能用 OpenSharing 分享淺層複製品。
- 您不能將淺層複製嵌套,這表示您無法從一個淺層複製再建立另一個淺層複製。
- 對於外部資料表,則
DROP TABLE不會移除底層的資料檔案,因此當原始資料表被丟棄時,淺層複製不會受到影響。 - 對於 Databricks Runtime 13.3 LTS 及以上版本的受管理資料表,移除來源資料表的淺層複製仍可持續運作,直到原始資料檔案被刪除。 請參閱刪除用於淺層複製的基底表。