重要
這項功能目前處於 公開預覽版。
重要
淺層克隆支援在 Unity Catalog 管理的資料表和外部資料表之間有所不同。 受管理資料表使用Databricks Runtime 13.3及以上版本,外部資料表則使用Databricks Runtime 14.2及以上版本。
您只能將 Unity 目錄受控數據表複製到 Unity 目錄受控數據表,並將 Unity 目錄外部數據表複製到 Unity 目錄外部數據表。
VACUUM Managed 和外部數據表的行為不同。 請參閱 Vacuum 和 Unity 目錄淺層複製。
您可以使用淺層複製,從現有的 Unity 目錄資料表建立新的 Unity 目錄數據表。 Unity 目錄的淺層複製支援可讓您建立具有與父數據表無關之訪問控制許可權的數據表,而不需要複製基礎數據檔。
關於如何複製資料表的資訊,請參閱 Azure Databricks 上的複製資料表。
有關 Unity 目錄資料表的資訊,請參見 Azure Databricks 資料表。
在 Unity Catalog 建立一個淺層克隆
您可以使用整個產品中淺層複製的相同語法,在 Unity 目錄中建立淺層複製,如下列語法範例所示:
CREATE TABLE <catalog-name>.<schema-name>.<target-table-name> SHALLOW CLONE <catalog-name>.<schema-name>.<source-table-name>
若要在 Unity 目錄上建立淺層複製品,您必須在來源和目標資源上擁有足夠的許可權,如下表所述:
| 資源 | 需要的權限 |
|---|---|
| 來源資料表 | SELECT |
| 來源架構 | USE SCHEMA |
| 來源目錄 | USE CATALOG |
| 目標架構 |
USE SCHEMA、CREATE TABLE |
| 目標目錄 | USE CATALOG |
| 目標外部位置(僅限外部資料表) | CREATE EXTERNAL TABLE |
如同其他 create 數據表語句,建立淺層複製的用戶是目標數據表的擁有者。 目標複製資料表的擁有者可以獨立於源資料表來控制該資料表的存取權限。
注意
複製數據表的擁有者可能與源數據表的擁有者不同。
在 Unity Catalog 中查詢或修改淺層克隆的資料表
重要
本節中的指示說明以標準存取模式設定的計算所需的許可權(先前稱為共用存取模式)。 如需使用專屬存取模式(以前稱為單一使用者存取模式)的說明,請參閱 在專屬存取模式下操作淺層複製資料表。
若要在 Unity Catalog 上查詢淺層克隆,您必須在資料表及所含資源上擁有足夠的權限,如下表所述:
| 資源 | 需要的權限 |
|---|---|
| 目錄 | USE CATALOG |
| 架構 | USE SCHEMA |
| 表 | SELECT |
您也必須擁有 MODIFY 複製作業目標的許可權,才能完成下列動作:
- 插入記錄
- 刪除記錄
- 更新記錄
MERGECREATE TABLEDROP TABLE
Vacuum 和 Unity 目錄淺層複製
當您針對淺層複製作業的來源和目標使用 Unity 目錄數據表時,Unity 目錄會管理基礎數據檔,以改善複製作業來源和目標的可靠性。 在淺層複製的來源上執行 VACUUM 並不會破壞已複製的資料表。
一般而言,當識別指定保留閾值的有效檔案時 VACUUM ,只會考慮目前數據表的元數據。 Unity Catalog 的淺層複製支援會跟踪所有複製資料表與源資料檔之間的關係,因此有效檔案會擴展,以包含返回任何淺層複製資料表及源資料表查詢所需的資料檔。
這表示對於 Unity 目錄淺層複製 VACUUM 語意,有效的數據檔是源數據表或任何複製數據表之指定保留閾值內的任何檔案。 管理資料表和外部資料表在語義上稍有不同。
這種強化的元資料追蹤改變了 VACUUM 操作對資料表後方資料檔案的影響方式,具體語義如下:
- 針對受控資料表進行操作時,
VACUUM淺層複製作業的來源或目標可能會導致從源資料表刪除數據檔案。 - 針對外部數據表,只有在對源數據表執行時,
VACUUM作業才會從源數據表中移除數據檔。 - 只有未被視為對於源表或任何針對源表的淺層克隆有效的數據文件才會被移除。
- 如果針對單一源數據表定義多個淺層複製品,則在任何複製數據表上執行
VACUUM並不會移除其他複製數據表的有效數據檔。
注意
Databricks 建議VACUUM 的保留設定不要少於 7 天,以避免損壞正在進行的長時間交易。 如果您需要以較低的保留閾值執行 VACUUM,請確定您瞭解 VACUUM 在 Unity Catalog 中的淺層複製與 VACUUM 在 Azure Databricks 上其他複製表的互動方式有何不同。 請參閱 在 Azure Databricks 上複製數據表。
在專用存取模式中使用淺層複製數據表
在專用存取模式中使用 Unity Catalog 淺層克隆時,您必須對複製表來源的資源以及目標表具有許可權。
這表示,除目標表MODIFY 源數據表的許可權。
Databricks 建議使用標準存取模式進行計算以操作 Unity 目錄的複製品,因為這樣可使 Unity 目錄的淺層複製目標及其源數據表的權限得以獨立演進。
捨棄淺層複製的基底表格
如果刪除淺層複製的基礎表格,則該複製便不可用。 根據預設,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 Runtime 13.3 LTS 和更新版本中,以已卸除的受控數據表為基礎的受控淺層複製品在這 7 天期間繼續運作。 如果您在此視窗中沒有UNDROP源數據表,淺層複製會在源數據表的數據檔被垃圾收集后停止運作。