什麼是 Unity 目錄?

本文介紹 Unity 目錄,這是 Databricks Lakehouse 上數據和 AI 資產的統一治理解決方案。

Unity 目錄概觀

Unity 目錄提供 Azure Databricks 工作區的集中式訪問控制、稽核、譜系和數據探索功能。

Unity 目錄圖表

Unity 目錄的主要功能包括:

  • 定義一次,保護所有位置:Unity 目錄提供單一位置來管理適用於所有工作區的數據存取原則。
  • 符合標準的安全性模型:Unity 目錄的安全性模型是以標準 ANSI SQL 為基礎,並允許系統管理員使用熟悉的語法,在目錄層級、資料庫(也稱為架構)、數據表和檢視層級,授與現有數據湖中的許可權。
  • 內建稽核和譜系:Unity 目錄會自動擷取用戶層級稽核記錄,記錄數據的存取權。 Unity 目錄也會擷取歷程數據,以追蹤如何跨所有語言建立和使用數據資產。
  • 數據探索:Unity 目錄可讓您標記和記錄數據資產,並提供搜尋介面來協助數據取用者尋找數據。
  • 系統數據表 (公開預覽):Unity 目錄可讓您輕鬆地存取和查詢帳戶的操作數據,包括稽核記錄、可計費使用量和譜系。

Unity 目錄如何控管雲端物件記憶體中數據和 AI 資產的存取權?

Databricks 建議您使用 Unity 目錄來設定雲端物件記憶體的所有存取。 請參閱使用 Unity 目錄將 連線 至雲端物件記憶體。

Unity 目錄引進下列概念來管理 Azure Databricks 中的數據與雲端物件記憶體之間的關聯性:

注意

Lakehouse Federation 提供與其他外部系統中數據的整合。 這些物件不受雲端物件記憶體支援。

Unity Catalog 物件模型

在 Unity 目錄中,主要資料物件的階層會從中繼存放區流向數據表或磁碟區:

  • 中繼存放區: 中繼資料的最上層容器。 每個中繼存放區都會公開三層命名空間 (catalog..schematable) 來組織您的數據。
  • 目錄: 物件階層的第一層,用來組織您的資料資產。
  • 架構:也稱為資料庫,架構是物件階層的第二層,包含數據表和檢視。
  • 數據表、檢視和磁碟區:數據物件階層中的最低層級是數據表、檢視和磁碟區。 磁碟區提供非表格式數據的控管。
  • 模型:雖然它們不是嚴格來說,但數據資產、已註冊的模型也可以在 Unity 目錄中管理,而且位於物件階層中的最低層級。

Unity Catalog 物件模型圖表

這是安全性實體 Unity 目錄對象的簡化檢視。 如需詳細資訊,請參閱 Unity 目錄中的安全性實體物件。

您可以使用三層命名空間參考 Unity 目錄中的所有數據: catalog.schema.asset,其中 asset 可以是數據表、檢視、磁碟區或模型。

中繼存放區

中繼存放區是 Unity 目錄中物件的最上層容器。 它會註冊有關數據和 AI 資產的元數據,以及控管其存取權的許可權。 Azure Databricks 帳戶管理員應該為每個其運作的區域建立一個中繼存放區,並將其指派給相同區域中的 Azure Databricks 工作區。 若要讓工作區使用 Unity 目錄,它必須附加 Unity 目錄中繼存放區。

中繼存放區可以選擇性地在 Azure Data Lake 儲存體 Gen2 容器或您自己雲端記憶體帳戶中的 Cloudflare R2 貯體中設定受控記憶體位置。 請參閱 受控記憶體

注意

此中繼存放區與尚未針對 Unity 目錄啟用的 Azure Databricks 工作區中包含的 Hive 中繼存放區不同。 如果您的工作區包含舊版 Hive 中繼存放區,該中繼存放區中的數據仍會與 Unity 目錄中定義的數據一起使用,且目錄中名為 hive_metastore。 請注意,目錄 hive_metastore 不是由 Unity 目錄管理,也不會受益於與 Unity 目錄中定義的目錄相同的功能集。

請參閱 建立 Unity 目錄中繼存放區

目錄

目錄是 Unity 目錄三層命名空間的第一層。 它用來組織您的數據資產。 用戶可以查看已為其指派 USE CATALOG數據許可權的所有目錄。

根據您的工作區建立和啟用 Unity 目錄的方式,您的使用者可能會有自動布建目錄的默認許可權,包括 main 目錄或 工作區目錄<workspace-name>)。 如需詳細資訊,請參閱 預設用戶許可權

請參閱 建立和管理目錄

模式

架構(也稱為資料庫)是 Unity 目錄三層命名空間的第二層。 架構會組織數據表和檢視。 使用者可以查看已為其指派 USE SCHEMA 許可權的所有架構,以及 USE CATALOG 架構父目錄的許可權。 若要存取或列出架構中的數據表或檢視表,用戶也必須具有 SELECT 數據表或檢視的許可權。

如果您的工作區已手動啟用 Unity 目錄,它就會在目錄中包含名為 defaultmain 的預設架構,可供工作區中的所有使用者存取。 如果您的工作區自動啟用 Unity 目錄並包含目錄,該目錄會包含 <workspace-name> 名為 default 的架構,可供工作區中的所有使用者存取。

請參閱建立和管理架構(資料庫)。

數據表位於 Unity 目錄三層命名空間的第三層。 其中包含數據列。 若要建立數據表,用戶必須擁有 CREATEUSE SCHEMA 架構的許可權,而且他們必須具有 USE CATALOG 其父目錄的許可權。 若要查詢數據表,用戶必須具有 SELECT 數據表的許可權、 USE SCHEMA 其父架構的許可權,以及 USE CATALOG 其父目錄的許可權。

數據表可以 管理外部

受控數據表

受控數據表是在 Unity 目錄中建立資料表的預設方式。 Unity 目錄會管理這些數據表的生命週期和檔案配置。 您不應該使用 Azure Databricks 以外的工具,直接操作這些數據表中的檔案。 受控數據表一律使用 Delta 數據表格式。

針對手動為 Unity 目錄啟用的工作區,受控數據表會儲存在您建立中繼存放區時所設定的根記憶體位置。 您可以選擇性地在目錄或架構層級指定受控數據表儲存位置,覆寫根記憶體位置。

若為 Unity 目錄自動啟用的工作區,中繼存放區根記憶體位置是選擇性的,而且受控數據表通常會儲存在目錄或架構層級。

卸除受控數據表時,其基礎數據會在 30 天內從您的雲端租用戶中刪除。

請參閱 受控數據表

外部數據表

外部數據表是數據表,其數據生命週期和檔案配置不受 Unity 目錄管理。 使用外部數據表在 Unity 目錄中註冊大量的現有數據,或者如果您需要使用 Azure Databricks 叢集或 Databricks SQL 倉儲以外的工具直接存取數據。

當您卸除外部數據表時,Unity 目錄不會刪除基礎數據。 您可以管理外部數據表的許可權,並以與受控數據表相同的方式在查詢中使用它們。

外部資料表可以使用下列檔案格式:

  • DELTA
  • CSV
  • JSON
  • AVRO
  • PARQUET
  • ORC
  • TEXT

請參閱 外部數據表

視圖

檢視是從中繼存放區中的一或多個數據表和檢視所建立的唯讀物件。 它位於 Unity 目錄三層命名空間的第三層。 您可以從多個架構和目錄的數據表和其他檢視建立檢視表。 您可以建立 動態檢視 來啟用資料列和資料行層級許可權。

請參閱 建立動態檢視

磁碟區位於 Unity 目錄三層命名空間的第三層。 磁碟區是依 Unity 目錄架構組織之數據表、檢視和其他物件的同層級。

磁碟區包含以任何格式儲存數據的目錄和檔案。 磁碟區提供非表格式的數據存取,這表示磁碟區中的檔案無法註冊為數據表。

  • 若要建立磁碟區,用戶必須具有 CREATE VOLUMEUSE SCHEMA 架構的許可權,而且他們必須具有 USE CATALOG 其父目錄的許可權。
  • 若要讀取儲存在磁碟區內的檔案和目錄,用戶必須擁有READ VOLUME其父架構的許可權、USE SCHEMAUSE CATALOG其父目錄的許可權。
  • 若要新增、移除或修改儲存在磁碟區內的檔案和目錄,用戶必須具有 WRITE VOLUME 許可權、 USE SCHEMA 其父架構的許可權,以及 USE CATALOG 其父目錄的許可權。

磁碟區可以 管理外部

注意

當您定義磁碟區時,磁碟區路徑下數據的雲端 URI 存取權是由磁碟區的許可權所控管。

受控磁碟區

當您想要布建治理位置以使用非表格式檔案時,受控磁碟區是一個方便的解決方案。

受控磁碟區會將檔案儲存在 Unity 目錄預設儲存位置,以供其包含的架構。 針對手動為 Unity 目錄啟用的工作區,受控磁碟區會儲存在您建立中繼存放區時所設定的根記憶體位置。 您可以選擇性地在目錄或架構層級指定受控磁碟區儲存位置,覆寫根記憶體位置。 針對自動為 Unity 目錄啟用的工作區,中繼存放區根記憶體位置是選擇性的,且受控磁碟區通常會儲存在目錄或架構層級。

下列優先順序會控管用於受控磁碟區的位置:

  • 架構位置
  • 目錄位置
  • Unity 目錄中繼存放區根記憶體位置

當您刪除受控磁碟區時,儲存在此磁碟區的檔案也會在 30 天內從您的雲端租用戶中刪除。

請參閱 什麼是受控磁碟區?

外部磁碟區

外部磁碟區會註冊到 Unity 目錄外部位置,並提供雲端記憶體中現有檔案的存取權,而不需要數據遷移。 用戶必須具有 CREATE EXTERNAL VOLUME 外部位置的許可權,才能建立外部磁碟區。

外部磁碟區支援其他系統所產生的檔案,並使用物件記憶體在 Azure Databricks 內暫存以供存取,或 Azure Databricks 外部的工具需要直接檔案存取的案例。

Unity 目錄不會管理外部磁碟區中檔案的生命週期和配置。 當您卸除外部磁碟區時,Unity 目錄不會刪除基礎數據。

請參閱 什麼是外部磁碟區?

模型

模型位於 Unity 目錄三層命名空間的第三層。 在此內容中,「模型」是指在 MLflow 模型登錄中註冊的 機器學習模型。 若要在 Unity 目錄中建立模型,用戶必須具有 CREATE MODEL 目錄或架構的許可權。 用戶也必須具有 USE CATALOG 父目錄和 USE SCHEMA 父架構的許可權。

受控記憶體

您可以將受控數據表和受控磁碟區儲存在 Unity Catalog 物件階層:中繼存放區、目錄或架構的任何層級。 階層中較低層級的 儲存體 會覆寫在較高層級定義的記憶體。

當帳戶管理員手動建立中繼存放區時,他們可以選擇在 Azure Data Lake 儲存體 Gen2 容器或 Cloudflare R2 貯體中指派記憶體位置,以作為受控數據表和磁碟區的中繼存放區層級記憶體。 如果已指派中繼存放區層級受控儲存位置,則目錄和架構層級的受控儲存位置是選擇性的。 也就是說,中繼存放區層級的記憶體是選擇性的,Databricks 建議在目錄層級指派受控記憶體以進行邏輯數據隔離。 請參閱 數據控管和數據隔離建置組塊

重要

如果您的工作區已針對 Unity 目錄自動啟用,則會建立 Unity 目錄中繼存放區,而不需要中繼存放區層級的受控記憶體。 您可以選擇新增中繼存放區層級記憶體,但 Databricks 建議在目錄和架構層級指派受控記憶體。 如需決定是否需要中繼存放區層級記憶體的協助,請參閱 (選擇性) 建立中繼存放區層級記憶體 和數據 會在記憶體中實際分隔。

受控記憶體具有下列屬性:

  • 受控數據表和受控磁碟區會將數據和元數據檔案儲存在受控記憶體中。
  • 受控儲存位置無法與外部數據表或外部磁碟區重疊。

下表描述如何宣告和管理與 Unity Catalog 對象相關聯的受控記憶體:

相關聯的 Unity Catalog 物件 如何設定 與外部位置的關聯
Metastore 在中繼存放區建立期間由帳戶管理員設定,如果在建立時未指定任何記憶體,或在中繼存放區建立之後新增。 無法重疊外部位置。
目錄 使用 MANAGED LOCATION 關鍵詞在目錄建立期間指定。 必須包含在外部位置內。
結構描述 使用 MANAGED LOCATION 關鍵詞在架構建立期間指定。 必須包含在外部位置內。

用來儲存受控數據表和受控磁碟區之數據和元數據的受控儲存位置會使用下列規則:

  • 如果包含架構具有受控位置,則數據會儲存在架構受控位置中。
  • 如果包含的架構沒有受控位置,但目錄具有受控位置,則數據會儲存在目錄受控位置中。
  • 如果包含的架構和包含目錄都沒有受控位置,數據會儲存在中繼存放區受控位置中。

儲存體 認證和外部位置

若要管理外部數據表、外部磁碟區和受控記憶體的基礎雲端記憶體存取,Unity 目錄會使用下列物件類型:

請參閱使用 Unity 目錄將 連線 至雲端物件記憶體。

Unity 目錄的身分識別管理

Unity 目錄會使用 Azure Databricks 帳戶中的身分識別來解析用戶、服務主體和群組,以及強制執行許可權。

若要在帳戶中設定身分識別,請遵循管理用戶、服務主體和群組中的指示。 當您在 Unity 目錄中建立 存取控制原則 時,請參閱這些使用者、服務主體和群組。

Unity 目錄使用者、服務主體和群組也必須新增至工作區,才能存取筆記本、Databricks SQL 查詢、目錄總管或 REST API 命令中的 Unity 目錄數據。 將使用者、服務主體和群組指派給工作區稱為 身分識別同盟

已連結 Unity 目錄中繼存放區的所有工作區都會針對身分識別同盟啟用。

群組的特殊考慮

工作區中已經存在的任何群組會標示為 帳戶控制台中的 [本機工作區 ]。 這些工作區本地組無法在 Unity 目錄中用來定義存取原則。 您必須使用帳戶層級群組。 如果在命令中參考工作區本地組,該命令會傳回找不到群組的錯誤。 如果您先前曾使用工作區本地組來管理筆記本和其他成品的存取權,這些許可權仍有效。

請參閱 管理群組

Unity 目錄 管理員 角色

帳戶管理員、中繼存放區管理員和工作區管理員都參與管理 Unity 目錄:

請參閱 Unity 目錄中 管理員 許可權。

Unity 目錄中的數據許可權

在 Unity 目錄中,數據預設為安全。 一開始,用戶無法存取中繼存放區中的數據。 中繼存放區管理員、對象的擁有者或包含對象的目錄或架構的擁有者可以授與存取權。 Unity 目錄中的安全性實體物件是階層式物件,且權限會向下繼承。

您可以使用目錄總管、SQL 命令或 REST API 來指派和撤銷許可權。

請參閱 在 Unity 目錄中管理許可權。

Unity 目錄支援的計算和叢集存取模式

執行 Databricks Runtime 11.3 LTS 或更新版本之叢集支援 Unity 目錄。 所有 SQL 倉儲 計算版本預設都支援 Unity 目錄。

在舊版 Databricks Runtime 上執行的叢集不支援所有 Unity 目錄 GA 特性和功能。

若要存取 Unity 目錄中的數據,叢集必須設定正確的 存取模式。 Unity 目錄預設為安全。 如果未使用其中一個 Unity 目錄支援的存取模式來設定叢集(也就是共用或指派),叢集就無法存取 Unity 目錄中的數據。 請參閱 存取模式

如需每個 Databricks 執行時間版本中 Unity 目錄功能變更的詳細資訊,請參閱 版本資訊

Unity 目錄的限制會因存取模式和 Databricks 運行時間版本而異。 請參閱 Unity 目錄的計算存取模式限制。

Unity 目錄的數據譜系

您可以使用 Unity 目錄,在 Azure Databricks 叢集或 SQL 倉儲上執行的任何語言,跨查詢擷取運行時間數據譜系。 譜系會擷取到數據行層級,並包含與查詢相關的筆記本、工作流程和儀錶板。 若要深入瞭解,請參閱 使用 Unity 目錄擷取和檢視數據譜系。

Lakehouse 同盟和 Unity 目錄

Lakehouse Federation 是 Azure Databricks 的查詢同盟平臺。 查詢同盟一詞描述一組功能,可讓用戶和系統對多個孤島數據源執行查詢,而不需要將所有數據遷移至統一系統。

Azure Databricks 使用 Unity 目錄來管理查詢同盟。 您可以使用 Unity 目錄來設定熱門外部資料庫系統的唯讀 連線 ,並建立 鏡像外部資料庫的外部目錄 。 Unity 目錄的數據控管和數據譜系工具可確保針對 Azure Databricks 工作區中使用者所做的所有同盟查詢,管理及稽核數據存取。

請參閱 什麼是 Lakehouse 同盟

如何? 為組織設定 Unity 目錄嗎?

若要瞭解如何設定 Unity 目錄,請參閱 設定和管理 Unity 目錄

支援的區域

所有區域都支援 Unity 目錄。 如需詳細資訊,請參閱 Azure Databricks 區域

支援的數據檔案格式

Unity 目錄支援下清單格格式:

Unity 目錄限制

Unity 目錄具有下列限制。

注意

如果您的叢集是在低於 11.3 LTS 的 Databricks 運行時間版本上執行,可能還有其他限制,但此處未列出。 Databricks Runtime 11.3 LTS 或更新版本支援 Unity 目錄。

Unity 目錄限制會因 Databricks 執行時間和存取模式而有所不同。 結構化串流工作負載會根據 Databricks 運行時間和存取模式而有額外的限制。 請參閱 Unity 目錄的計算存取模式限制。

  • R 中的工作負載不支援針對數據列層級或數據行層級安全性使用動態檢視。

  • 在 Databricks Runtime 13.3 LTS 和更新版本中,支援淺層複製從現有的 Unity 目錄受控數據表建立 Unity 目錄受控數據表。 在 Databricks Runtime 12.2 LTS 和以下版本中,Unity 目錄中不支援淺層複製。 請參閱 Unity 目錄數據表的淺層複製。

  • Unity 目錄數據表不支援貯體。 如果您執行命令來嘗試在 Unity 目錄中建立貯體數據表,則會擲回例外狀況。

  • 如果某些叢集存取 Unity 目錄,而其他叢集則無法從多個區域的工作區寫入相同的路徑或 Delta Lake 數據表,可能會導致效能不可靠。

  • Unity 目錄中的數據表不支援使用之類的 ALTER TABLE ADD PARTITION 命令所建立的自定義分割區配置。 Unity 目錄可以存取使用目錄樣式數據分割的數據表。

  • 只有 Delta 資料表才支援 DataFrame 寫入作業至 Unity 目錄的覆寫模式,不適用於其他檔案格式。 用戶必須具有 CREATE 父架構的許可權,而且必須是現有對象的擁有者,或具有 MODIFY 對象的許可權。

  • 在 Databricks Runtime 13.3 LTS 和更新版本中,支援 Python 純量 UDF。 在 Databricks Runtime 12.2 LTS 和以下版本中,您無法使用 Python UDF,包括 Spark 上的 UDAF、UDF 和 Pandas (applyInPandasmapInPandas)。

  • 在 Databricks Runtime 14.2 和更新版本中,共用叢集支援純量 UDF。 在 Databricks Runtime 14.1 和以下版本中,共用叢集不支援所有 Scala UDF。

  • 先前在工作區中建立的群組(也就是工作區層級群組)無法在 Unity 目錄 GRANT 語句中使用。 這是為了確保跨工作區的群組檢視一致。 若要在 GRANT 語句中使用群組,請在帳戶層級建立您的群組,並更新主體或群組管理的任何自動化(例如 SCIM、Okta 和 Microsoft Entra ID(先前稱為 Azure Active Directory)連接器和 Terraform,以參考帳戶端點,而不是工作區端點。 請參閱 帳戶群組與工作區本地組之間的差異。

  • 不支援標準 Scala 線程集區。 請改用 中的 org.apache.spark.util.ThreadUtils特殊線程集區, org.apache.spark.util.ThreadUtils.newDaemonFixedThreadPool例如 。 不過,不支援 中的 ThreadUtils 下列線程集區: ThreadUtils.newForkJoinPool 和任何 ScheduledExecutorService 線程集區。

  • 僅限工作區層級的 Unity 目錄事件支援稽核記錄。 不會記錄在帳戶層級發生的事件,而不參考工作區,例如建立中繼存放區。

下列限制適用於 Unity 目錄中的所有物件名稱:

  • 物件名稱不能超過 255 個字元。
  • 不允許下列特殊字元:
    • 期間 (.
    • 空間 (
    • 正斜線 (/)
    • 所有 ASCII 控制字元 (00-1F 十六進位)
    • DELETE 字元 (7F 十六進位)
  • Unity 目錄會將所有物件名稱儲存為小寫。
  • 在 SQL 中參考 UC 名稱時,您必須使用反引號來逸出包含特殊字元的名稱,例如連字元 (-)。

注意

數據行名稱可以使用特殊字元,但如果使用特殊字元,則必須在所有 SQL 語句中使用反引號來逸出名稱。 Unity 目錄會保留資料行名稱大小寫,但 Unity 目錄數據表的查詢不區分大小寫。

Unity 目錄中的模型有其他限制。 請參閱 Unity 目錄支援的限制。

資源配額

Unity 目錄會對所有安全物件強制執行資源配額。 限制在整個 Unity 目錄都遵循相同的階層式組織。 如果您預期超過這些資源限制,請連絡您的 Azure Databricks 帳戶小組。

下面的配額值是相對於 Unity 目錄中的父 (或祖系) 物件表示的。

Object 上層
table schema 10000
table 中繼存放區 100000
磁碟區 schema 10000
函數 schema 10000
註冊的模型 schema 1000
註冊的模型 中繼存放區 5000
模型版本 註冊的模型 10000
模型版本 中繼存放區 100000
schema catalog 10000
catalog 中繼存放區 1000
connection 中繼存放區 1000
儲存體認證 中繼存放區 200
外部位置 中繼存放區 500

如需差異共用限制,請參閱 資源配額