什麼是 Unity Catalog?
本文介紹 Unity 目錄,這是 Azure Databricks 上數據和 AI 資產的整合治理解決方案。
注意
Unity 目錄也可作為開放原始碼實作使用。 請參閱 公告部落格 和公用 Unity 目錄 GitHub 存放庫。
Unity 目錄概觀
Unity 目錄提供 Azure Databricks 工作區的集中式訪問控制、稽核、譜系和數據探索功能。
Unity 目錄的主要功能包括:
- 定義一次,保護所有位置:Unity 目錄提供單一位置來管理適用於所有工作區的數據存取原則。
- 符合標準的安全性模型:Unity 目錄的安全性模型是以標準 ANSI SQL 為基礎,可讓系統管理員使用熟悉的語法,在目錄、架構(也稱為資料庫)、數據表和檢視層級,授與現有數據湖中的許可權。
- 內建稽核和譜系:Unity 目錄會自動擷取用戶層級稽核記錄,記錄數據的存取權。 Unity 目錄也會擷取歷程數據,以追蹤如何跨所有語言建立和使用數據資產。
- 數據探索:Unity 目錄可讓您標記和記錄數據資產,並提供搜尋介面來協助數據取用者尋找數據。
- 系統數據表 (公開預覽):Unity 目錄可讓您輕鬆地存取和查詢帳戶的操作數據,包括稽核記錄、可計費使用量和譜系。
Unity Catalog 物件模型
在 Unity 目錄中,所有元數據都會在中繼存放區中註冊。 任何 Unity 目錄中繼存放區中的資料庫物件階層會分成三個層級,當您參考數據表、檢視、磁碟區、模型和函式時,會以三層命名空間表示catalog.schema.table-etc
。
中繼存放區
中繼存放區是 Unity 目錄中元數據的最上層容器。 它會註冊有關數據和 AI 資產的元數據,以及控管其存取權的許可權。 若要讓工作區使用 Unity 目錄,它必須附加 Unity 目錄中繼存放區。
針對您擁有工作區的每個區域,您應該有一個中繼存放區。 工作區如何附加至中繼存放區? 請參閱 如何? 為我的組織設定 Unity 目錄?。
中繼存放區中的物件階層
在 Unity 目錄中繼存放區中,三層資料庫物件階層包含包含架構的目錄,進而包含數據和 AI 物件,例如數據表和模型。
第一層:
- 目錄可用來組織您的數據資產,通常用來作為數據隔離配置的最上層。 目錄通常會鏡像組織單位或軟體開發生命週期範圍。 請參閱什麼是 Azure Databricks 中的目錄?。
- 非數據安全性物件,例如記憶體認證和外部位置,可用來管理 Unity 目錄中的數據控管模型。 這些也會直接存在於中繼存放區底下。 其他安全性實體物件會更詳細地描述它們。
層級二:
- 架構(也稱為資料庫)包含數據表、檢視、磁碟區、AI 模型和函式。 架構會將數據和 AI 資產組織成比目錄更細微的邏輯類別。 架構通常代表單一使用案例、專案或小組沙盒。 請參閱 什麼是 Azure Databricks 中的架構?。
第三層:
- 磁碟 區是雲端物件記憶體中非結構化非表格式數據的邏輯磁碟區。 您可以 管理磁碟區,使用 Unity 目錄管理記憶體中數據的完整生命週期和版面配置,或是 外部的 Unity Catalog 管理 Azure Databricks 記憶體數據的存取權,但無法管理從其他用戶端存取雲端記憶體中的數據。 請參閱 什麼是 Unity 目錄磁碟區? 和 Managed 與外部數據表和磁碟區。
- 數據表 是由數據列和數據行所組織的數據集合。 您可以 管理數據表,使用 Unity 目錄管理資料表的完整生命週期,或是 外部數據表,使用 Unity 目錄管理從 Azure Databricks 中存取數據,但無法管理從其他用戶端存取雲端記憶體中的數據。 請參閱 什麼是數據表和檢視? 以及 Managed 與外部數據表和磁碟區。
- 檢視 會針對一或多個數據表儲存查詢。 請參閱 什麼是檢視?。
- 函式 是傳回純量值或數據列集之已儲存邏輯的單位。 請參閱 Unity 目錄中的使用者定義函式 (UDF)。
- 模型 是使用 MLflow 封裝並在 Unity 目錄中註冊為函式的 AI 模型。 請參閱在 Unity 目錄中管理模型生命週期。
在 Unity 目錄中使用資料庫物件
在 Unity 目錄中使用資料庫物件與使用 Hive 中繼存放區中註冊的資料庫物件非常類似,但 Hive 中繼存放區不包含物件命名空間中的目錄除外。 您可以使用熟悉的 ANSI 語法來建立資料庫物件、管理資料庫物件、管理許可權,以及使用 Unity 目錄中的數據。 您也可以使用目錄總管 UI 來建立資料庫物件、管理資料庫物件,以及管理資料庫對象的許可權。
如需詳細資訊,請參閱 Azure Databricks 和 Work with Unity Catalog 和 舊版 Hive 中繼存放區中的資料庫物件。
其他安全性實體物件
除了架構中包含的資料庫物件和 AI 資產之外,Unity 目錄也會使用下列安全性實體物件控管數據的存取:
服務認證,其會封裝長期雲端認證,以提供外部服務的存取權。 請參閱 使用服務認證管理外部雲端服務的存取權。
記憶體認證,其封裝提供雲端記憶體存取權的長期雲端認證。 請參閱 建立記憶體認證以連線到 Azure Data Lake Storage Gen2。
外部位置,其中包含記憶體認證和雲端記憶體路徑的參考。 外部位置可用來建立外部數據表,或指派 受控數據表和磁碟區的受控儲存位置 。 請參閱 建立外部位置以將雲端記憶體連線到 Azure Databricks、 使用受控記憶體的數據隔離,以及在 Unity 目錄中指定受控記憶體位置。
連接,代表使用 Lakehouse 同盟,在 MySQL 等資料庫系統中,提供唯讀存取外部資料庫的認證。 請參閱 Lakehouse 同盟和 Unity 目錄 ,以及 什麼是 Lakehouse 同盟?。
清除會議室,代表 Databricks 管理的環境,讓多個參與者可以在專案上共同作業,而不需要彼此共用基礎數據。 請參閱什麼是 Azure Databricks Clean Rooms?。
共用,這是 Delta Sharing 物件,代表數據提供者與一或多個收件者共用的唯讀數據和 AI 資產集合。
收件者,這些物件是 Delta Sharing 物件,代表從數據提供者接收共享的實體。
提供者,其為 Delta Sharing 物件,代表與收件者共用數據的實體。
如需 Delta Sharing 安全性實體對象的詳細資訊,請參閱 什麼是 Delta Sharing?。
授與和撤銷 Unity 目錄中資料庫物件和其他安全性實體物件的存取權
您可以在階層中的任何層級授與和撤銷安全性實體物件的存取權,包括中繼存放區本身。 除非撤銷存取權,否則物件的存取權會隱含地授與該物件的所有子系相同的存取權。
您可以使用一般 ANSI SQL 命令來授與和撤銷 Unity 目錄中物件的存取權。 例如:
GRANT CREATE TABLE ON SCHEMA mycatalog.myschema TO `finance-team`;
您也可以使用目錄總管、Databricks CLI 和 REST API 來管理物件許可權。
若要瞭解如何管理 Unity 目錄中的許可權,請參閱 在 Unity 目錄中管理許可權。
Unity 目錄中資料庫對象的預設存取權
Unity 目錄會以最低許可權原則運作,用戶擁有執行其必要工作所需的最低存取權。 建立工作區時,非系統管理員使用者只能存取自動布建的 工作區目錄,這可讓使用者在 Unity 目錄中試用建立和存取資料庫物件的程式。 請參閱 工作區目錄許可權。
管理員角色
工作區管理員和帳戶管理員預設有其他許可權。 中繼存放區管理員 是選擇性角色,如果您想要在中繼存放區層級管理數據表和磁碟區記憶體,而且如果您想要集中管理區域中多個工作區的數據,則為必要角色。 如需詳細資訊,請參閱 Unity 目錄中 的系統管理員許可權和 (選擇性) 指派中繼存放區管理員角色。
受控與外部數據表和磁碟區
數據表和磁碟區可以管理或外部。
- 受控數據表 完全由 Unity 目錄管理,這表示 Unity 目錄會管理每個受控數據表的治理和基礎數據檔。 受控數據表會儲存在您的雲端記憶體中 Unity 目錄管理的位置。 受控數據表一律使用 Delta Lake 格式。 您可以將受控數據表儲存在中繼存放區、目錄或架構層級。
- 外部數據表是可從 Azure Databricks 存取權由 Unity 目錄管理的數據表 ,但是其數據生命週期和檔案配置是使用您的雲端提供者和其他數據平台進行管理。 通常您會使用外部數據表在 Azure Databricks 中註冊大量的現有數據,或者,如果您也需要使用 Azure Databricks 外部的工具來寫入數據,則為 。 外部數據表支援多種數據格式。 在 Unity 目錄中繼存放區中註冊外部數據表之後,您可以管理及稽核 Azure Databricks 存取它,並使用它,就像您可以搭配受控數據表一樣。
- 受控磁碟 區完全由 Unity 目錄管理,這表示 Unity 目錄會管理雲端提供者帳戶中磁碟區儲存位置的存取權。 當您建立受控磁碟區時,它會自動儲存在 指派給包含架構的受控儲存位置 中。
- 外部磁碟區 代表在 Azure Databricks 外部管理的記憶體位置中現有的數據,但已在 Unity 目錄中註冊,以控制及稽核來自 Azure Databricks 內的存取權。 當您在 Azure Databricks 中建立外部磁碟區時,您會指定其位置,該位置必須位於 Unity 目錄 外部位置中定義的路徑上。
Databricks 建議受控數據表和磁碟區充分利用 Unity 目錄治理功能和效能優化。
請參閱使用受控數據表、使用外部數據表和 Managed 與外部磁碟區。
使用受控記憶體的數據隔離
您的組織可能需要將特定類型的數據儲存在雲端租使用者的特定帳戶或貯體內。
Unity 目錄可讓您在中繼存放區、目錄或架構層級設定儲存位置,以滿足這類需求。 系統會評估記憶體位置階層,從架構到目錄到中繼存放區。
例如,假設您的組織有公司合規性政策,需要與人力資源相關的生產數據位於容器中 abfss://mycompany-hr-prod@storage-account.dfs.core.windows.net。 在 Unity 目錄中,您可以藉由在目錄層級上設定位置、建立名為 的目錄,以及 hr_prod
將位置指派給目錄 abfss://mycompany-hr-prod@storage-account.dfs.core.windows.net/unity-catalog,以達到此需求。 這表示在目錄中建立的 hr_prod
受控數據表或磁碟區(例如,使用 CREATE TABLE hr_prod.default.table …
)會將數據儲存在 abfss://mycompany-hr-prod@storage-account.dfs.core.windows.net/unity-catalog 中。 您可以選擇提供架構層級的位置,以更細微的層級組織 中的數據 hr_prod catalog
。
如果某些目錄不需要記憶體隔離,您可以選擇性地在中繼存放區層級設定儲存位置。 此位置可作為目錄和架構中未指派記憶體之受控數據表和磁碟區的預設位置。 不過,通常 Databricks 建議您為每個目錄指派個別的受控儲存位置。
如需詳細資訊,請參閱 在 Unity 目錄中 指定受控記憶體位置,而 數據會在記憶體中實際分隔。
工作區目錄系結
根據預設,目錄擁有者(和中繼存放區管理員,如果已為帳戶定義的話)可以讓連結至相同 Unity 目錄中繼存放區之多個工作區中的使用者存取目錄。 不過,如果您使用工作區來隔離用戶數據存取,您可能會想要限制帳戶中特定工作區的目錄存取權,以確保特定種類的數據只會在這些工作區中處理。 例如,您可能想要個別的生產與開發工作區,或個別的工作區來處理個人資料。 這稱為 工作區目錄系結。 請參閱限制特定工作區的目錄存取。
注意
為了提升數據隔離,您也可以將雲端記憶體存取和雲端服務存取系結至特定工作區。 請參閱 (選擇性) 將記憶體認證指派給特定工作區、(選擇性) 將外部位置指派給特定工作區,以及 (選擇性) 將服務認證指派給特定工作區。
稽核數據存取
Unity 目錄會擷取針對中繼存放區執行的動作稽核記錄,讓系統管理員能夠存取存取誰存取指定數據集及其所執行動作的詳細數據。
您可以使用 Unity 目錄所管理的系統資料表來存取帳戶的稽核記錄。
請參閱稽核 Unity 目錄事件、Unity 目錄事件,以及使用系統數據表監視帳戶活動。
追蹤數據譜系
您可以使用 Unity 目錄,在 Azure Databricks 叢集或 SQL 倉儲上執行的任何語言,跨查詢擷取運行時間數據譜系。 譜系會擷取到數據行層級,並包含與查詢相關的筆記本、作業和儀錶板。 若要深入瞭解,請參閱 使用 Unity 目錄擷取和檢視數據譜系。
Lakehouse 同盟和 Unity 目錄
Lakehouse Federation 是 Azure Databricks 的查詢同盟平臺。 查詢同盟一詞描述一組功能,可讓用戶和系統對多個孤島數據源執行查詢,而不需要將所有數據遷移至統一系統。
Azure Databricks 使用 Unity 目錄來管理查詢同盟。 您可以使用 Unity 目錄來設定熱門外部資料庫系統的唯讀 連線 ,並建立 鏡像外部資料庫的外部目錄 。 Unity 目錄的數據控管和數據譜系工具可確保針對 Azure Databricks 工作區中使用者所做的所有同盟查詢,管理及稽核數據存取。
請參閱 什麼是 Lakehouse 同盟?。
Delta Sharing、Databricks Marketplace 和 Unity 目錄
差異共用是一個安全的數據共享平臺,可讓您與組織外部的使用者共享數據和 AI 資產,無論這些使用者是否使用 Databricks。 雖然差異共用是以開放原始碼實作的形式提供,但在 Databricks 中,它需要 Unity 目錄充分利用擴充功能。 請參閱什麼是 Delta Sharing?。
Databricks Marketplace 是交換數據產品的開放論壇,建置在差異共用之上,因此,您必須擁有已啟用 Unity 目錄的工作區,才能成為 Marketplace 提供者。 請參閱什麼是 Databricks Marketplace?。
如何? 為我的組織設定 Unity 目錄嗎?
若要使用 Unity 目錄,您的 Azure Databricks 工作區必須針對 Unity 目錄啟用,這表示工作區會附加至 Unity 目錄中繼存放區。
工作區如何附加至中繼存放區? 這取決於帳戶和工作區:
- 一般而言,當您第一次在區域中建立 Azure Databricks 工作區時,會自動建立中繼存放區並附加至工作區。
- 對於某些較舊的帳戶,帳戶管理員必須建立中繼存放區,並將該區域中的工作區指派給中繼存放區。 如需指示,請參閱 建立 Unity 目錄中繼存放區。
- 如果帳戶已為區域指派中繼存放區,帳戶管理員可以決定是否自動將中繼存放區附加至該區域中的所有新工作區。 請參閱 啟用自動指派給新工作區的中繼存放區。
無論您的工作區是否自動啟用 Unity 目錄,也需要下列步驟才能開始使用 Unity 目錄:
- 建立目錄和架構,以包含數據表和磁碟區等資料庫物件。
- 建立受控儲存位置,以將這些目錄和架構中儲存受控數據表和磁碟區。
- 將目錄、架構和資料庫物件的存取權授與使用者。
針對 Unity 目錄自動啟用的工作區會布 建工作區目錄 ,並授與所有工作區使用者的廣泛許可權。 此目錄是試用 Unity 目錄的便利起點。
如需詳細的設定指示,請參閱 設定和管理 Unity 目錄。
將現有的工作區移轉至 Unity 目錄
如果您有最近針對 Unity 目錄啟用的較舊工作區,則可能有舊版 Hive 中繼存放區所管理的數據。 您可以將該數據與在 Unity 目錄中註冊的數據搭配使用,但舊版 Hive 中繼存放區已被取代,而且您應該儘快將 Hive 中繼存放區中的數據遷移至 Unity 目錄,以利用 Unity 目錄優越的治理功能和效能。
移轉牽涉到下列各項:
- 將任何工作區本地組轉換成帳戶層級群組。 Unity 目錄會在帳戶層級集中管理身分識別。
- 將 Hive 中繼存放區中管理的數據表和檢視移轉至 Unity 目錄。
- 更新查詢和作業以參考新的 Unity 目錄數據表,而不是舊的 Hive 中繼存放區數據表。
下列項目可協助您管理移轉:
UCX 是 Databricks Labs 專案,提供的工具可協助您將非 Unity 目錄工作區升級至 Unity 目錄。 UCX 是較大規模移轉的絕佳選擇。 請參閱使用 UCX 公用程式將工作區升級至 Unity Catalog。
如果您有少量的數據表要移轉,Azure Databricks 會提供 UI 精靈和 SQL 命令,可供您使用。 請參閱 將Hive數據表和檢視升級至 Unity 目錄。
若要瞭解如何在Hive中繼存放區中搭配相同工作區中的資料庫物件使用Hive中繼存放區中的數據表,請參閱 使用 Unity 目錄和舊版 Hive 中繼存放區。
Unity 目錄需求和限制
Unity 目錄需要特定類型的計算和檔格式,如下所述。 下面也列出所有 Databricks 運行時間版本的 Unity 目錄中未完全支援的一些 Azure Databricks 功能。
區域支援
所有區域都支援 Unity 目錄。 如需詳細資訊,請參閱 Azure Databricks 區域。
計算需求
執行 Databricks Runtime 11.3 LTS 或更新版本之叢集支援 Unity 目錄。 所有 SQL 倉儲計算版本預設都支援 Unity 目錄。
在舊版 Databricks Runtime 上執行的叢集不支援所有 Unity 目錄 GA 特性和功能。
若要存取 Unity 目錄中的數據,叢集必須設定正確的 存取模式。 Unity 目錄預設為安全。 如果未使用共用或單一使用者存取模式設定叢集,叢集就無法存取 Unity 目錄中的數據。 請參閱存取模式。
如需每個 Databricks 執行時間版本中 Unity 目錄功能變更的詳細資訊,請參閱 版本資訊。
Unity 目錄的限制會因存取模式和 Databricks 運行時間版本而異。 請參閱 Unity 目錄的計算存取模式限制。
檔案格式支援
Unity 目錄支援下清單格格式:
限制
Unity 目錄具有下列限制。 其中有些是較舊的 Databricks 運行時間版本和計算存取模式特有的。
結構化串流工作負載有額外的限制,視 Databricks 運行時間和存取模式而定。 請參閱 Unity 目錄的計算存取模式限制。
Databricks 會發行定期壓縮此清單的新功能。
先前在工作區中建立的群組(也就是工作區層級群組)無法在 Unity Catalog
GRANT
語句中使用。 這是為了確保跨工作區的群組檢視保持一致。 若要在 T 語句中使用GRAN
群組,請在帳戶層級建立您的群組,並更新主體或群組管理的任何自動化(例如 SCIM、Okta 和 Microsoft Entra ID 連接器和 Terraform),以參考帳戶端點,而不是工作區端點。 請參閱 帳戶群組與工作區本地組之間的差異。R 中的工作負載不支援針對執行 Databricks Runtime 15.3 和以下計算的數據列層級或數據行層級安全性使用動態檢視。
針對 R 中查詢動態檢視的工作負載,使用執行 Databricks Runtime 15.4 LTS 或更新版本的單一使用者計算資源。 這類工作負載也需要啟用無伺服器計算的工作區。 如需詳細資訊,請參閱 單一用戶計算的細微訪問控制。
在執行 Databricks Runtime 12.2 LTS 和以下版本的計算上,Unity 目錄中不支援淺層複製。 您可以使用淺層複製,在 Databricks Runtime 13.3 LTS 和更新版本上建立受控數據表。 不論 Databricks 執行時間版本為何,您無法使用它們來建立外部數據表。 請參閱<Unity 目錄資料表>的淺複製。
Unity 目錄資料表不支援貯體。 如果您執行命令來嘗試在 Unity 目錄中建立貯體資料表,則會擲回例外狀況。
如果某些叢集存取 Unity 目錄,而其他叢集則無法從多個區域的工作區寫入相同的路徑或 Delta Lake 資料表,可能會導致效能不可靠。
使用之類的
ALTER TABLE ADD PARTITION
命令操作外部數據表的數據分割,需要啟用數據分割元數據記錄。 請參閱外部資料表的資料分割探索。只有 Delta 資料表才支援 DataFrame 寫入至 Unity 目錄作業的覆寫模式,不適用於其他檔案格式。 用戶必須具有
CREATE
父架構的許可權,而且必須是現有對象的擁有者,或具有MODIFY
對象的許可權。Databricks Runtime 12.2 LTS 和以下版本不支援 Python UDF。 這包括 Spark 上的 UDAF、UDF 和 Pandas (
applyInPandas
和mapInPandas
)。 Databricks Runtime 13.3 LTS 和更新版本支援 Python 純量 UDF。共用叢集上的 Databricks Runtime 14.1 和以下版本不支援 Scala UDF。 共用叢集上的 Databricks Runtime 14.2 和更新版本支援純量 UDF。
不支援標準 Scala 線程集區。 請改用 中的
org.apache.spark.util.ThreadUtils
特殊線程集區,org.apache.spark.util.ThreadUtils.newDaemonFixedThreadPool
例如 。 不過,不支援 中的ThreadUtils
下列線程集區:ThreadUtils.newForkJoinPool
和任何ScheduledExecutorService
線程集區。僅限工作區層級的 Unity 目錄事件支援稽核記錄。 不會記錄在帳戶層級發生的事件,而不參考工作區,例如建立中繼存放區。
在 Unity 目錄中註冊的模型有其他限制。 請參閱限制。
資源配額
Unity 目錄會對所有安全物件強制執行資源配額。 這些配額列在資源限制中。 如果你預期超過這些資源限制,請連絡你的 Azure Databricks 帳戶團隊。
你可以使用 Unity 目錄資源配額 API 來監視配額使用。 請參閱 監視 Unity 目錄資源配額的使用方式。