Unity 目錄數據表的淺層複製
重要
Unity 目錄受控數據表的淺層複製支援在 Databricks Runtime 13.3 和更新版本中處於公開預覽狀態。 Unity 目錄外部數據表的淺層複製支援在 Databricks Runtime 14.2 和更新版本中處於公開預覽狀態。
您可以使用淺層複製,從現有的 Unity 目錄資料表建立新的 Unity 目錄數據表。 Unity 目錄的淺層複製支援可讓您建立具有與父數據表無關之訪問控制許可權的數據表,而不需要複製基礎數據檔。
重要
您只能將 Unity 目錄受控數據表複製到 Unity 目錄受控數據表,並將 Unity 目錄外部數據表複製到 Unity 目錄外部數據表。 VACUUM
Managed 和外部數據表的行為不同。 請參閱 Vacuum 和 Unity 目錄淺層複製。
如需 Delta 複製的詳細資訊,請參閱 在 Azure Databricks 上複製數據表。
如需 Unity 目錄數據表的詳細資訊,請參閱 什麼是數據表和檢視?。
在 Unity 目錄上建立淺層複製
您可以使用整個產品中淺層複製的相同語法,在 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 目錄上的淺層複製數據表
重要
本節中的指示說明使用共用存取模式設定之計算所需的許可權。 針對單一使用者存取模式,請參閱 使用單一使用者存取模式中的淺層複製數據表。
若要在 Unity 目錄上查詢淺層複製品,您必須在數據表上擁有足夠的許可權,並包含資源,如下表所述:
資源 | 需要的權限 |
---|---|
目錄 | USE CATALOG |
結構描述 | USE SCHEMA |
Table | SELECT |
您也必須擁有 MODIFY
複製作業目標的許可權,才能完成下列動作:
- 插入記錄
- 刪除記錄
- 更新記錄
MERGE
CREATE OR REPLACE TABLE
DROP TABLE
Vacuum 和 Unity 目錄淺層複製
重要
此行為在 Databricks Runtime 13.3 LTS 和更新版本中的公開預覽中,適用於 Managed 數據表和 Databricks Runtime 14.2 和更新版本,適用於外部數據表。
當您針對淺層複製作業的來源和目標使用 Unity 目錄數據表時,Unity 目錄會管理基礎數據檔,以改善複製作業來源和目標的可靠性。 在淺層複製的來源上執行 VACUUM
並不會中斷複製的數據表。
一般而言,當識別指定保留閾值的有效檔案時 VACUUM
,只會考慮目前數據表的元數據。 Unity 目錄的淺層複製支援會追蹤所有複製數據表與源數據檔之間的關聯性,因此會展開有效的檔案,以包含傳回任何淺層複製數據表以及源數據表之查詢所需的數據檔。
這表示對於 Unity 目錄淺層複製 VACUUM
語意,有效的數據檔是源數據表或任何複製數據表之指定保留閾值內的任何檔案。 Managed 數據表和外部數據表的語意稍有不同。
這項增強的元數據追蹤會變更 VACUUM
作業如何影響備份 Delta 數據表的數據檔,並具有下列語意:
- 針對 Managed 資料表,
VACUUM
針對淺層複製作業的來源或目標,作業可能會從源數據表中刪除數據檔。 - 針對外部數據表,只有在對源數據表執行時,
VACUUM
作業才會從源數據表中移除數據檔。 - 只會移除對源數據表或針對來源的任何淺層複製未被視為有效的數據檔。
- 如果針對單一源數據表定義多個淺層複製品,則在任何複製數據表上執行
VACUUM
並不會移除其他複製數據表的有效數據檔。
注意
Databricks 建議永不執行 VACUUM
,保留設定少於 7 天,以避免損毀進行中的長時間執行交易。 如果您需要以較低的保留閾值執行 VACUUM
,請確定您瞭解 VACUUM
Unity 目錄中淺層複製與 Azure Databricks 上其他複製數據表互動的方式 VACUUM
有何不同。 請參閱 在 Azure Databricks 上複製數據表。
使用單一使用者存取模式中的淺層複製數據表
在單一使用者存取模式中使用 Unity 目錄淺層複製時,您必須具有複製資料表來源的資源以及目標數據表的許可權。
這表示除了目標數據表的必要許可權之外,對於簡單查詢,您必須擁有USE
來源目錄的許可權,以及源數據表的架構和SELECT
許可權。 對於任何將更新或插入記錄至目標數據表的查詢,您也必須具有 MODIFY
源數據表的許可權。
Databricks 建議使用使用共用存取模式計算上的 Unity 目錄複製品,因為這樣可獨立演進 Unity 目錄淺層複製目標及其源數據表的許可權。
限制
- 外部數據表上的淺層複製必須是外部數據表。 受控數據表上的淺層複製必須是受控數據表。
- 您無法使用差異共享來共用淺層複製品。
- 您無法巢狀淺層複製品,這表示您無法從淺層複製建立淺層複製品。
- 針對 Managed 資料表,卸除源數據表會中斷淺層複製的目標數據表。 備份外部數據表的數據檔不會由
DROP TABLE
作業移除,因此外部數據表的淺層複製不會受到卸除來源的影響。 - Unity 目錄可讓使用者在
UNDROP
命令之後DROP TABLE
大約 7 天管理數據表。 在 Databricks Runtime 13.3 LTS 和更新版本中,以已卸除的受控數據表為基礎的受控淺層複製品在這 7 天期間繼續運作。 如果您在此視窗中沒有UNDROP
源數據表,淺層複製會在源數據表的數據檔被垃圾收集后停止運作。