重要
這項功能目前處於 公開預覽版。
重要
淺層克隆支援在 Unity Catalog 管理的資料表和外部資料表之間有所不同。 受管理資料表使用Databricks Runtime 13.3及以上版本,外部資料表則使用Databricks Runtime 14.2及以上版本。
您只能將 Unity 目錄受控數據表複製到 Unity 目錄受控數據表,並將 Unity 目錄外部數據表複製到 Unity 目錄外部數據表。
VACUUM Managed 和外部數據表的行為不同。 請參見 Unity Catalog 淺層克隆的使用VACUUM。
您可以使用淺層複製,從現有的 Unity 目錄資料表建立新的 Unity 目錄數據表。 Unity 目錄的淺層複製支援可讓您建立具有與父數據表無關之訪問控制許可權的數據表,而不需要複製基礎數據檔。
關於如何複製資料表的資訊,請參閱 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 |
和其他建立資料表語句一樣,建立淺層複製的使用者擁有目標資料表。 複製目標資料表的擁有者可獨立於來源資料表控制該資料表的存取權限。 這表示克隆資料表的擁有者可能與來源資料表的擁有者不同。
建立 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 |
在標準存取模式下處理淺克隆表格
若要在標準存取模式(前稱共享存取模式)查詢淺層克隆,您必須在資料表及資源中擁有以下權限。
| 資源 | 需要的權限 |
|---|---|
| 目錄 | USE CATALOG |
| 架構 | USE SCHEMA |
| 表 | SELECT |
你也必須對複製操作的目標擁有 MODIFY 權限,才能完成以下操作。
- 插入記錄
- 刪除記錄
- 更新記錄
MERGECREATE TABLEDROP TABLE
在專用存取模式中使用淺層複製數據表
在專屬存取模式(過去稱為單一使用者存取模式)使用 Unity Catalog 淺層克隆時,必須同時擁有克隆資料表原始碼及目標資料表的資源權限。
這表示,除了目標資料表所需的權限外,簡單查詢還必須擁有 USE 原始目錄和結構的權限,以及 SELECT 來源資料表的權限。 對於任何將更新或插入記錄至目標數據表的查詢,您也必須具有 MODIFY 源數據表的許可權。
Databricks 建議使用標準存取模式進行計算以操作 Unity 目錄的複製品,因為這樣可使 Unity 目錄的淺層複製目標及其源數據表的權限得以獨立演進。
使用 Unity Catalog 進行淺層複製VACUUM
當您針對淺層複製作業的來源和目標使用 Unity 目錄數據表時,Unity 目錄會管理基礎數據檔,以改善複製作業來源和目標的可靠性。 在淺層複製的來源上執行 VACUUM 並不會破壞已複製的資料表。
一般而言,當識別指定保留閾值的有效檔案時 VACUUM ,只會考慮目前數據表的元數據。 然而,Unity Catalog 的淺層克隆支援會追蹤所有克隆資料表與來源資料檔案之間的關係,因此有效檔案會擴充至包含回傳任何淺克隆資料表及來源資料表查詢所需的資料檔案。
這表示對於 Unity 目錄淺層複製 VACUUM 語意,有效的數據檔是源數據表或任何複製數據表之指定保留閾值內的任何檔案。 管理資料表和外部資料表在語義上稍有不同。
這種增強的元資料追蹤改變了操作對 Delta 資料表底層資料檔案的影響 VACUUM ,語意如下。
- 針對受控資料表進行操作時,
VACUUM淺層複製作業的來源或目標可能會導致從源資料表刪除數據檔案。 - 針對外部數據表,只有在對源數據表執行時,
VACUUM作業才會從源數據表中移除數據檔。 - 只有未被視為對於源表或任何針對源表的淺層克隆有效的數據文件才會被移除。
- 如果針對單一源數據表定義多個淺層複製品,則在任何複製數據表上執行
VACUUM並不會移除其他複製數據表的有效數據檔。
注意
Databricks 建議VACUUM 的保留設定不要少於 7 天,以避免損壞正在進行的長時間交易。 如果您需要以較低的保留閾值執行 VACUUM,請確定您瞭解 VACUUM 在 Unity Catalog 中的淺層複製與 VACUUM 在 Azure Databricks 上其他複製表的互動方式有何不同。 欲了解更多資訊,請參閱 Azure Databricks 上的資料表複製。
另外,即使有淺克隆表被移除,你可能還是需要 SELECT 存取淺克隆表才能在基底表上執行 VACUUM 。 Databricks 會讀取淺層複製者的 Delta 日誌,確認複製人仍在參考哪些基底資料表資料檔案,然後再進行真空處理。 Databricks 會在丟棄一個淺克隆表以支援 UNDROP 操作後,維持此連結 7 天。 但在標準存取模式下,此權限並非必需。
捨棄淺層複製的基底表格
如果刪除淺層複製的基礎表格,則該複製便不可用。 根據預設,Databricks 會阻止您刪除基底資料表,除非該資料表不再被任何淺層複製所引用。
若要覆蓋此保護,請使用 DROP TABLE ... FORCE 語法。 如果您使用 FORCE:
- 基底表格會立即刪除。
- 所有參照的淺層克隆都會被破壞,並且:
- 在需要讀取資料或中繼資料的作業上失敗 (例如,
SELECT、INSERT、UPDATEDESCRIBE HISTORY)。CLONE - 仍可透過中繼資料層級作業 (例如
SHOW TABLES,DROP TABLE) 顯示,以允許清除。
- 在需要讀取資料或中繼資料的作業上失敗 (例如,
此行為僅適用於 Unity 目錄受控資料表。 如需詳細資訊,請參閱DROP TABLE。
限制
- 外部資料表上的淺層複製必須是外部資料表。 受控數據表上的淺層複製必須是受控數據表。
- 您無法使用
REPLACE或CREATE OR REPLACE來覆寫現有的淺層複製。 相反地,DROP淺層複製並執行新的CREATE語句。 - 您無法使用 Delta Sharing 來分享淺層克隆。
- 您不能將淺層複製嵌套,這表示您無法從一個淺層複製再建立另一個淺層複製。
- 針對 Managed 資料表,卸除源數據表會中斷淺層複製的目標數據表。 外部資料表的底層資料檔案不會被
DROP TABLE操作移除,因此外部資料表的淺層複製不會因丟棄原始資料而受到影響。 - Unity 目錄可讓使用者在
UNDROP命令後大約 7 天管理表格DROP TABLE。 在 Databricks 執行時 13.3 LTS 及以上版本中,移除原始碼表的管理淺層克隆在 Unity 目錄支援UNDROP的 7 天期間內仍可正常運作。 若該視窗內未還原來源資料表,當垃圾回收時刪除原始資料檔案時,淺層複製將停止運作。