本文介紹 Unity 目錄,這是 Azure Databricks 上數據和 AI 資產的整合治理解決方案。 它說明重要概念,並提供如何使用 Unity 目錄來管理數據的概觀。
注意
Unity 目錄也可作為開放原始碼實作使用。 請參閱 公告部落格 和公用 Unity 目錄 GitHub 存放庫。
Unity 目錄概觀
Unity 目錄是集中式數據目錄,可跨 Azure Databricks 工作區提供訪問控制、稽核、譜系、品質監視和數據探索功能。
Unity 目錄的主要功能包括:
- 定義一次,保護所有位置:Unity 目錄提供單一位置來管理跨區域中所有工作區套用的數據存取原則。
- 符合標準的安全性模型:Unity 目錄的安全性模型是以標準 ANSI SQL 為基礎,並允許系統管理員使用熟悉的語法授與現有 Data Lake 中的許可權。
- 內建稽核和譜系:Unity 目錄會自動擷取用戶層級稽核記錄,記錄數據的存取權。 Unity 目錄也會擷取歷程數據,以追蹤如何跨所有語言建立和使用數據資產。
- 數據探索:Unity 目錄可讓您標記和記錄數據資產,並提供搜尋介面來協助數據取用者尋找數據。
- 系統數據表:Unity 目錄可讓您輕鬆地存取和查詢帳戶的作數據,包括稽核記錄、計費使用量和譜系。
中繼存放區
中繼存放區是 Unity 目錄中元數據的最上層容器。 它會註冊有關數據和 AI 資產的元數據,以及控管其存取權的許可權。 若要讓工作區使用 Unity 目錄,它必須附加 Unity 目錄中繼存放區。 若您在不同區域擁有工作區,則每個區域應各自擁有一個中繼存放區。
不同於Hive中繼存放區,Unity 目錄中繼存放區不是服務界限:它會在多租用戶環境中執行,並代表特定 Azure Databricks 帳戶依區域區隔數據的邏輯界限。
Unity Catalog 物件模型
在 Unity 目錄中繼存取庫中,三層級資料庫物件階層由目錄組成,而目錄包含綱要,進而包含數據和 AI 物件,例如資料表和模型。 當您參考數據表、檢視、磁碟區、模型和函式時,此階層會以三層命名空間表示catalog.schema.table-etc
。
第一層:
- 目錄可用來組織您的數據資產,通常用來作為數據隔離配置的最上層。 目錄通常會鏡像組織單位或軟體開發生命週期範圍。 請參閱什麼是 Azure Databricks 中的目錄?。
- 非數據安全性物件,例如記憶體認證和外部位置,可用來管理 Unity 目錄中的數據控管模型。 這些也會直接存在於中繼存放區底下。 詳細描述可在Unity Catalog 用於管理外部數據源存取的安全性實體物件中找到。
層級二:
- 架構(也稱為資料庫)包含數據表、檢視、磁碟區、AI 模型和函式。 架構會將數據和 AI 資產組織成比目錄更細微的邏輯類別。 架構通常代表單一使用案例、專案或小組沙盒。 請參閱 什麼是 Azure Databricks 中的架構?。
第三層:
- 數據表 是由數據列和數據行所組織的數據集合。 您可以 管理數據表,使用 Unity 目錄管理資料表的完整生命週期,或是 外部數據表,使用 Unity 目錄管理從 Azure Databricks 中存取數據,但無法管理從其他用戶端存取雲端記憶體中的數據。 請參閱 Azure Databricks 數據表 和 受控數據表與外部數據表和磁碟區簡介。
- 檢視 會針對一或多個數據表儲存查詢。 請參閱 什麼是檢視?。
- 磁碟區 代表雲端物件儲存中的邏輯數據磁碟區。 您可以使用磁碟區,以任何格式儲存、組織和存取檔案,包括結構化、半結構化和非結構化數據。 它們通常用於非表格式數據。 磁碟區可以是 管理的,由 Unity Catalog 完整管理存儲中數據的生命週期和版面配置,或者是外部的,由 Unity Catalog 管理 Azure Databricks 內部數據的存取權,但不管理其他客戶端存取雲端存儲中的數據。 請參閱 什麼是 Unity 目錄磁碟區? 和 Managed 與外部數據表和磁碟區。
- 函式 是傳回純量值或數據列集之已儲存邏輯的單位。 請參閱 Unity 目錄中的使用者定義函式 (UDF)。
- 模型 是使用 MLflow 封裝並在 Unity 目錄中註冊為函式的 AI 模型。 請參閱在 Unity 目錄中管理模型生命週期。
Unity 目錄使用可管理的物件來管理對外部數據來源的存取權限。
除了架構中包含的資料庫物件和 AI 資產之外,Unity 目錄也會使用下列可安全管理的物件來管理雲端儲存和其他外部數據來源和服務的存取:
- 記憶體認證,其封裝提供雲端記憶體存取權的長期雲端認證。 請參閱 建立記憶體認證以連線到 Azure Data Lake Storage。
- 外部位置,其會參考雲端記憶體路徑和存取它所需的記憶體認證。 外部位置可用來建立外部數據表,或指派 受控數據表和磁碟區的受控儲存位置 。 請參閱 建立外部位置以將雲端記憶體連線到 Azure Databricks、 雲端記憶體和數據隔離,以及在 Unity 目錄中指定受控記憶體位置。
- 連接,代表使用 Lakehouse 同盟,在 MySQL 等資料庫系統中,提供唯讀存取外部資料庫的認證。 請參閱 什麼是 Lakehouse 同盟?。
- 服務認證,其會封裝長期雲端認證,以提供外部服務的存取權。 請參閱 建立服務認證。
Unity Catalog 用於管理共享資產存取的可安全管理物件
Unity Catalog 使用下列可保護物件來管理跨中繼存放區或組織界限的資料和 AI 資產分享。
- 清除會議室,代表 Databricks 管理的環境,讓多個參與者可以在專案上共同作業,而不需要彼此共用基礎數據。 請參閱什麼是 Azure Databricks Clean Rooms?。
- 共用,這是 Delta Sharing 物件,代表數據提供者與一或多個收件者共用的唯讀數據和 AI 資產集合。
- 收件者,這些物件是 Delta Sharing 物件,代表從數據提供者接收共享的實體。
- 提供者,其為 Delta Sharing 物件,代表與收件者共用數據的實體。
如需 Delta Sharing 安全性實體對象的詳細資訊,請參閱 什麼是 Delta Sharing?。
管理員角色
根據預設,下列 Azure Databricks 系統管理員角色具有許多 Unity 目錄許可權:
- 帳戶管理員:可以建立中繼存放區、將工作區連結至中繼存放區、新增使用者,以及指派中繼存放區的許可權。
- 工作區系統管理員:可以將使用者新增至工作區,以及管理許多工作區特定的物件,例如作業和筆記本。 根據工作區而定,工作區系統管理員也可以在附加至工作區的中繼存放區上擁有許多許可權。
- 中繼存放區管理員:如果您想要在中繼存放區層級管理數據表和磁碟區記憶體,則需要此選擇性角色。 如果您想要集中管理區域中多個工作區的數據,也很方便。
如需詳細資訊,請參閱 Unity 目錄中的系統管理員許可權。
授與和撤銷可保護物件的存取權
有特權的使用者可以在階層中的任何層級授予和撤銷對安全物件的存取權,包括中繼存放區本身。 除非撤銷存取權,否則物件的存取權會自動授予該物件所有子系相同的存取權。
您可以使用一般 ANSI SQL 命令來授與和撤銷 Unity 目錄中物件的存取權。 例如:
GRANT CREATE TABLE ON SCHEMA mycatalog.myschema TO `finance-team`;
您也可以使用目錄總管、Databricks CLI 和 REST API 來管理物件許可權。
中繼存放區管理員、對象的擁有者,以及物件上具有 MANAGE privilege
的使用者,可以授與和撤銷存取權。 若要瞭解如何管理 Unity 目錄中的許可權,請參閱 在 Unity 目錄中管理許可權。
Unity 目錄中資料庫對象的預設存取權
Unity 目錄會以最低許可權原則運作,用戶擁有執行其必要工作所需的最低存取權。 建立工作區時,非系統管理員使用者只能存取自動布建的工作區目錄,這使得此目錄成為使用者在 Unity Catalog 中嘗試建立和存取資料庫物件流程的一個便捷位置。 請參閱 工作區目錄許可權。
在 Unity Catalog 中使用資料庫物件
在 Unity Catalog 中使用資料庫物件與在 Hive 中繼存放區註冊的資料庫物件工作非常類似,只是 Hive 中繼存放區的物件命名空間中不包括 Catalog。 您可以使用熟悉的 ANSI 語法來建立資料庫物件、管理資料庫物件、管理許可權,以及使用 Unity 目錄中的數據。 您也可以使用目錄總管 UI 來建立資料庫物件、管理資料庫物件,以及管理資料庫對象的許可權。
如需詳細資訊,請參閱 Azure Databricks 中的資料庫物件。
管理與外部資料表及磁碟區
資料表和存儲卷可以是可管理的或是外部的。
- 受控數據表 完全由 Unity 目錄管理,這表示 Unity 目錄會管理每個受控數據表的治理和基礎數據檔。 受管控的數據表會儲存在您的雲端儲存中由 Unity Catalog 管理的位置。 受控數據表一律使用 Delta Lake 格式。 您可以將受控數據表儲存在中繼存放區、目錄或架構層級。
- 外部數據表是可從 Azure Databricks 存取權由 Unity 目錄管理的數據表 ,但是其數據生命週期和檔案配置是使用您的雲端提供者和其他數據平台進行管理。 通常您會使用外部資料表在 Azure Databricks 中註冊大量的現有數據,或者如果您需要使用 Azure Databricks 以外的工具對數據進行寫入操作,也是如此。 外部數據表支援多種數據格式。 在 Unity 目錄中繼存放區中註冊外部數據表之後,您可以管理和稽核 Azure Databricks 存取權---並使用它---就像您可以搭配受控數據表一樣。
- 受控磁碟 區完全由 Unity 目錄管理,這表示 Unity 目錄會管理雲端提供者帳戶中磁碟區儲存位置的存取權。 當您建立受控磁碟區時,它會自動儲存在 指派給包含架構的受控儲存位置 中。
- 外部磁碟區 代表在 Azure Databricks 外部管理的記憶體位置中現有的數據,但已在 Unity 目錄中註冊,以控制及稽核來自 Azure Databricks 內的存取權。 當您在 Azure Databricks 中建立外部磁碟區時,您會指定其位置,該位置必須位於 Unity 目錄 外部位置中定義的路徑上。
Databricks 建議在大多數使用情境中採用受控數據表和磁碟區,因為這樣可以充分利用 Unity Catalog 的治理功能和效能優化。 如需有關外部數據表和磁碟區的一般使用案例的資訊,請參閱 Managed 和 external tables 和 Managed 和 external volumes。
另請參閱:
雲端記憶體和數據隔離
Unity 目錄會以兩種主要方式使用雲端記憶體:
- 受控記憶體:您在 Azure Databricks 中建立的受控數據表和受控磁碟區的預設位置(非結構化、非表格式數據)。 這些受控記憶體位置可以在中繼存放區、目錄或架構層級定義。 您可以在雲端提供者中建立受控記憶體位置,但其生命週期完全由 Unity 目錄管理。
- 用於儲存外部資料表和容量的儲存位置。 這些對資料表和磁碟區的存取是由 Unity Catalog 管理,但資料生命周期和檔案佈局是由您的雲端提供者和其他資料平台管理。 一般而言,您可以使用外部數據表或磁碟區,在 Azure Databricks 中註冊大量的現有數據,或者如果您需要使用 Azure Databricks 外部的工具來寫入數據,
使用外部位置控管雲端記憶體的存取
為儲存外部資料表和磁碟區的受控儲存位置與儲存位置,皆使用 外部位置 安全性對象來管理 Azure Databricks 的存取。 外部位置物件會參考雲端記憶體路徑,以及存取它所需的 記憶體認證 。 儲存認證本身是 Unity Catalog 可確保安全的物件,用於登記存取特定儲存路徑所需的憑證。 這些安全性實體可確保 Unity 目錄控制及追蹤記憶體的存取權。
下圖代表單一雲端記憶體容器的文件系統階層,其中四個外部位置共用一個記憶體認證。
如需詳細資訊,請參閱 Unity 目錄如何控管雲端記憶體的存取?。
受控記憶體位置階層
您在 Unity 目錄中定義受控記憶體的層級取決於您慣用的數據隔離模型。 您的組織可能需要將特定類型的數據儲存在雲端租使用者的特定帳戶或貯體內。
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 建議您為每個目錄指派個別的受控儲存位置。
系統會評估儲存位置階層,從架構到目錄到資料中繼庫。
例如,如果在 中myCatalog.mySchema.myTable
建立數據表my-region-metastore
,數據表儲存位置會根據下列規則來決定:
- 如果已針對
mySchema
提供位置,則會儲存在那裡。 - 如果沒有,並且位置已在
myCatalog
提供,則會儲存在那裡。 - 最後,如果未在 上
myCatalog
提供任何位置,則會儲存在與my-region-metastore
相關聯的位置。
如需詳細資訊,請參閱 在 Unity 目錄中指定受控儲存位置。
使用工作空間目錄系結進行環境隔離
根據預設,目錄擁有者(和中繼存放區管理員,如果已為帳戶定義的話)可以讓連結至相同 Unity 目錄中繼存放區之多個工作區中的使用者存取目錄。
組織與合規性需求通常會指定您保留某些數據,例如個人資料,只能在特定環境中存取。 您可能也想要將生產數據與開發環境隔離,或確保某些數據集和網域永遠不會聯結在一起。
在 Azure Databricks 中,工作區是主要數據處理環境,而目錄則是主要數據域。 Unity 目錄可讓中繼存放區系統管理員、目錄擁有者和具有 MANAGE
許可權的使用者,將目錄指派或「綁定」到特定工作區。 這些環境感知系結可讓您確保工作區中只有特定目錄可供使用,而不論授與使用者之數據物件的特定許可權為何。 不過,如果您使用工作區來隔離用戶數據存取,您可能會想要限制帳戶中特定工作區的目錄存取權,以確保特定種類的數據只會在這些工作區中處理。 例如,您可能想要個別的生產與開發工作區,或個別的工作區來處理個人資料。 這稱為 工作區目錄系結。 請參閱限制特定工作區的目錄存取。
注意
為了提升數據隔離,您也可以將雲端記憶體存取和雲端服務存取系結至特定工作區。 請參閱 (選擇性) 將記憶體認證指派給特定工作區、(選擇性) 將外部位置指派給特定工作區,以及 (選擇性) 將服務認證指派給特定工作區。
如何為我的組織設定 Unity Catalog 工具?
若要使用 Unity 目錄,您的 Azure Databricks 工作區必須針對 Unity 目錄啟用,這表示工作區會附加至 Unity 目錄中繼存放區。
工作區如何連接至中繼存放區? 這取決於帳戶和工作區:
- 一般而言,當您第一次在區域中建立 Azure Databricks 工作區時,會自動建立中繼存放區並附加至工作區。
- 對於某些較舊的帳戶,帳戶管理員必須建立中繼存放區,並將該區域中的工作區指派給中繼存放區。 如需指示,請參閱 建立 Unity 目錄中繼存放區。
- 如果帳戶已為區域指派中繼存放區,帳戶管理員可以決定是否自動將中繼存放區附加至該區域中的所有新工作區。 請參閱 啟用自動分配給新工作區的 Metastore。
無論您的工作區是否自動啟用 Unity 目錄,也需要下列步驟才能開始使用 Unity 目錄:
- 建立目錄和架構,以包含數據表和磁碟區等資料庫物件。
- 建立管理儲存位置,以在這些目錄和架構中儲存管理數據表和存儲卷。
- 將目錄、架構和資料庫物件的存取權授與使用者。
自動啟用的 Unity Catalog 工作區會提供一個 工作區目錄,並授予所有工作區使用者廣泛的許可權。 此目錄是試用 Unity 目錄的便利起點。
如需詳細的設定指示,請參閱 開始使用 Unity 目錄。
將現有的工作區升級至 Unity 目錄
若要瞭解如何將非 Unity 目錄工作區升級至 Unity 目錄,請參閱 將 Azure Databricks 工作區升級至 Unity 目錄。
Unity 目錄需求和限制
Unity 目錄需要特定類型的計算和檔格式,如下所述。 下面也列出在所有版本的 Databricks Runtime 中,Unity Catalog 未能完全支援的一些 Azure Databricks 功能。
區域支援
所有區域都支援 Unity 目錄。 如需詳細資訊,請參閱 Azure Databricks 區域。
計算需求
Unity 目錄支援在執行 Databricks Runtime 11.3 LTS 或更新版本的叢集上運行。 所有 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 Catalog 不支援淺層複製。 您可以使用淺層複製,在 Databricks Runtime 13.3 LTS 和更新版本上建立受控數據表。 不論 Databricks 執行時間版本為何,您無法使用它們來建立外部數據表。 請參閱 Unity Catalog 資料表的淺複製。
Unity Catalog 資料表不支援分桶。 如果您執行命令來嘗試在 Unity Catalog 中建立分桶表,則會引發例外狀況。
如果某些叢集存取 Unity 目錄,而其他叢集則無法從多個區域的工作區寫入相同的路徑或 Delta Lake 資料表,可能會導致效能不可靠。
使用
ALTER TABLE ADD PARTITION
之類的命令操作外部資料表的分割區,需要啟用分割區元數據記錄。 請參閱外部資料表的分割發現。對非 Delta 格式的數據表使用覆寫模式時,用戶必須具有父架構的 CREATE TABLE 許可權,而且必須是現有對象的擁有者,或具有 物件的 MODIFY 許可權。
Databricks Runtime 12.2 LTS 和以下版本不支援 Python UDF。 這包括 Spark 上的 UDAF、UDTF 和 Pandas (
applyInPandas
和mapInPandas
)。 Databricks Runtime 13.3 LTS 和更新版本支援 Python 純量 UDF。在具有標準存取模式的計算上,Databricks Runtime 14.1 和以下版本不支援 Scala UDF。 在使用標準存取模式進行的運算中,Databricks Runtime 14.2 和更新版本支援 Scala 純量 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 目錄資源配額的使用方式。