建立和管理目錄

本文說明如何在 Unity 目錄中建立和管理目錄。 目錄包含 架構(資料庫),而架構包含數據表、檢視、磁碟區、模型和函式。

注意

在自動為 Unity 目錄啟用的工作區中, 預設會為您建立工作區目錄 。 工作區中的所有使用者(且只有工作區)預設可以存取它。 請參閱 步驟 1:確認您的工作區已啟用 Unity 目錄

注意

若要瞭解如何建立 外部目錄、鏡像外部數據系統中資料庫的 Unity Catalog 物件,請參閱 建立外部目錄。 另 請參閱管理及使用外部目錄

需求

若要建立目錄:

  • 您必須是 Azure Databricks 中繼存放區管理員,或具有 CREATE CATALOG 中繼存放區的許可權。

  • 您必須將 Unity 目錄中繼存放區 連結至執行目錄建立所在的工作區

  • 您用來執行筆記本來建立目錄的叢集必須使用符合 Unity 目錄規範的存取模式。 請參閱 存取模式

    SQL 倉儲一律支援 Unity 目錄。

建立目錄

若要建立目錄,您可以使用目錄總管或 SQL 命令。

目錄總管

  1. 登入連結至中繼存放區的工作區。

  2. 按兩下 [目錄圖示目錄]。

  3. 按兩下 [ 建立目錄 ] 按鈕。

  4. 選擇您要建立的目錄類型:

    • 標準 類別目錄:組織 Unity 目錄所管理之數據資產的安全性實體物件。 除了 Lakehouse Federation 之外的所有使用案例。
    • 外部 目錄:Unity 目錄中的安全性實體物件,會使用 Lakehouse 同盟來鏡像外部數據系統中的資料庫。 請參閱 Lakehouse 同盟設定概觀。
  5. (選擇性但強烈建議)指定受控儲存位置。 CREATE MANAGED STORAGE需要目標外部位置的許可權。 請參閱 在 Unity 目錄中指定受控儲存位置。

    重要

    如果您的工作區沒有中繼存放區層級的儲存位置,您必須在建立目錄時指定受控記憶體位置。

  6. 按一下 [建立]

  7. (選擇性)指定目錄所系結的工作區。

    根據預設,目錄會與連結至目前中繼存放區的所有工作區共用。 如果目錄將包含應限制為特定工作區的數據,請移至 [ 工作區] 索引 標籤並新增這些工作區。

    如需詳細資訊,請參閱 (選擇性)將目錄指派給特定工作區

  8. 指派目錄的許可權。 請參閱 Unity 目錄許可權和安全性實體物件

Sql

  1. 在筆記本或 Databricks SQL 編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性專案。 取代佔位元值:

    • <catalog-name>:目錄的名稱。

    • <location-path>:選擇性但強烈建議使用。 如果您想要將此目錄中的受控數據表儲存在與針對中繼存放區設定的預設根記憶體不同的位置,請提供儲存位置路徑。

      重要

      如果您的工作區沒有中繼存放區層級的儲存位置,您必須在建立目錄時指定受控記憶體位置。

      此路徑必須在外部位置設定中定義,而且您必須具有 CREATE MANAGED STORAGE 外部位置設定的許可權。 您可以使用外部位置組態或子路徑中定義的路徑(換句話說, 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance''abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance/product')。 需要 Databricks Runtime 11.3 和更新版本。

    • <comment>:選擇性描述或其他批注。

    注意

    如果您要建立外部目錄(Unity Catalog 中鏡像外部數據系統中資料庫的安全性實體對象,用於 Lakehouse 同盟),則 SQL 命令是 CREATE FOREIGN CATALOG ,而且選項不同。 請參閱 建立外部目錄

    CREATE CATALOG [ IF NOT EXISTS ] <catalog-name>
       [ MANAGED LOCATION '<location-path>' ]
       [ COMMENT <comment> ];
    

    例如,若要建立名為 的 example目錄:

    CREATE CATALOG IF NOT EXISTS example;
    

    如果您想要限制帳戶中特定工作區的目錄存取權,也稱為工作區目錄系結,請參閱 將目錄系結至一或多個工作區

    如需參數描述,請參閱 CREATE CATALOG

  2. 將許可權指派給目錄。 請參閱 Unity 目錄許可權和安全性實體物件

當您建立目錄時,會自動建立 default 兩個架構(資料庫):和 information_schema

您也可以使用 Databricks Terraform 提供者databricks_catalog來建立目錄。 您可以使用 databricks_catalogs 來擷取目錄的相關信息。

(選擇性)將目錄指派給特定工作區

如果您使用工作區來隔離用戶數據存取,您可能會想要限制帳戶中特定工作區的目錄存取權,也稱為工作區目錄系結。 預設值是與連結至目前中繼存放區的所有工作區共享目錄。

您可以允許從工作區讀取和寫入目錄的存取權(預設值),也可以指定唯讀存取權。 如果您指定唯讀,則會封鎖從該工作區到該目錄的所有寫入作業。

將目錄系結至特定工作區的典型使用案例包括:

  • 確保使用者只能從生產工作區環境存取生產數據。
  • 確保使用者只能處理專用工作區中的敏感數據。
  • 讓使用者從開發人員工作區唯讀存取生產數據,以啟用開發和測試。

工作區目錄系結範例

以生產與開發隔離為例。 如果您指定生產數據目錄只能從生產工作區存取,這會取代任何發給使用者的個別授與。

目錄工作區系結圖表

在此圖表中, prod_catalog 系結至兩個生產工作區。 假設使用者已獲授與對名為 my_table 之數據表的prod_catalog存取權(使用 GRANT SELECT ON my_table TO <user>)。 如果使用者嘗試在開發人員工作區中存取 my_table ,他們會收到錯誤訊息。 使用者只能從 Prod ETL 和 Prod Analytics 工作區存取 my_table

工作區目錄系結會在平臺的所有區域中受到尊重。 例如,如果您查詢信息架構,則只會在發出查詢的工作區中看到可存取的目錄。 數據譜系和搜尋 UI 同樣只會顯示指派給工作區的目錄(無論是使用系結還是預設)。

將目錄系結至一或多個工作區

若要將目錄指派給特定工作區,您可以使用目錄總管或 Unity 目錄 REST API。

需要的許可權:中繼存放區管理員或目錄擁有者。

注意

無論目錄是否已指派給目前工作區,中繼存放區管理員都可以使用目錄總管查看中繼存放區中的所有目錄,而且目錄擁有者可以看到他們在中繼存放區中擁有的所有目錄。 未指派給工作區的目錄會顯示為灰色,而且看不到或可查詢任何子物件。

目錄總管

  1. 登入連結至中繼存放區的工作區。

  2. 按兩下 [目錄圖示目錄]。

  3. 在 [ 目錄 ] 窗格中,按兩下左側的目錄名稱。

    主要 [目錄總管] 窗格預設為 [ 目錄] 列表。 您也可以選取該處的目錄。

  4. 在 [ 工作區] 索引 標籤上,清除 [ 所有工作區都有存取權 ] 複選框。

    如果您的目錄已經系結至一或多個工作區,則此複選框已清除。

  5. 按兩下 [ 指派給工作區 ],然後輸入或尋找您想要指派的工作區。

  6. (選擇性)將工作區存取限制為唯讀。

    在 [ 管理存取層級 ] 功能表上,選取 [ 變更只讀取權]。

    您可以隨時編輯目錄,然後選取 [變更讀取和寫入的存取權] 來反轉此選取專案。

若要撤銷存取權,請移至 [ 工作區] 索引 卷標,選取工作區,然後按兩下 [ 撤銷]。

API

將目錄指派給工作區需要兩個 API 和兩個步驟。 在下列範例中,將 取代 <workspace-url> 為您的工作區實例名稱。 若要瞭解如何取得工作區實例名稱和工作區標識符,請參閱 取得工作區對象的標識碼。 若要瞭解如何取得存取令牌,請參閱 Azure Databricks 自動化的驗證 - 概觀

  1. catalogs使用 API 會目錄的 isolation mode 設定為 ISOLATED

    curl -L -X PATCH 'https://<workspace-url>/api/2.1/unity-catalog/catalogs/<my-catalog> \
    -H 'Authorization: Bearer <my-token> \
    -H 'Content-Type: application/json' \
    --data-raw '{
     "isolation_mode": "ISOLATED"
     }'
    

    預設值 isolation modeOPEN 附加至中繼存放區的所有工作區。

  2. 使用更新 bindings API 將工作區指派給目錄:

    curl -L -X PATCH 'https://<workspace-url>/api/2.1/unity-catalog/bindings/catalog/<my-catalog> \
    -H 'Authorization: Bearer <my-token> \
    -H 'Content-Type: application/json' \
    --data-raw '{
      "add": [{"workspace_id": <workspace-id>, "binding_type": <binding-type>}...],
      "remove": [{"workspace_id": <workspace-id>, "binding_type": "<binding-type>}...]
    }'
    

    "add"使用和 "remove" 屬性來新增或移除工作區系結。 <binding-type> 可以是 “BINDING_TYPE_READ_WRITE” (預設值) 或 “BINDING_TYPE_READ_ONLY”

若要列出目錄的所有工作區指派,請使用清單 bindings API:

   curl -L -X GET 'https://<workspace-url>/api/2.1/unity-catalog/bindings/catalog/<my-catalog> \
   -H 'Authorization: Bearer <my-token> \

從工作區解除系結目錄

使用目錄總管撤銷目錄存取權的指示,或 bindings API 包含在將目錄系結至一或多個工作區

重要

如果您的工作區已針對 Unity 目錄自動啟用,而且您有工作區目錄,工作區管理員就會擁有該目錄,而且只有工作區中該目錄的所有許可權。 如果您解除系結該目錄或系結至其他目錄,您必須以個別使用者或使用帳戶層級群組,手動將任何必要的許可權授與工作區管理員群組的成員,因為工作區管理員群組是工作區本機群組。 如需帳戶群組與工作區本地組的詳細資訊,請參閱 帳戶群組與工作區本地組之間的差異。

將架構新增至您的目錄

若要瞭解如何將架構(資料庫)新增至您的目錄。 請參閱建立和管理架構(資料庫)。

檢視目錄詳細數據

若要檢視目錄的相關信息,您可以使用目錄總管或 SQL 命令。

目錄總管

  1. 登入連結至中繼存放區的工作區。

  2. 按兩下 [目錄圖示目錄]。

  3. 在 [ 目錄 ] 窗格中,尋找目錄,然後按下其名稱。

    頁面頂端會列出一些詳細數據。 其他人可以在 [架構]、[詳細數據]、[許可權] 和 [工作區] 索引標籤上檢視

Sql

在筆記本或 Databricks SQL 編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性專案。 取代預留位置 <catalog-name>

如需詳細資訊,請參閱 DESCRIBE CATALOG

DESCRIBE CATALOG <catalog-name>;

使用 CATALOG EXTENDED 取得完整詳細數據。

刪除目錄

若要刪除或卸除目錄,您可以使用目錄總管或 SQL 命令。 若要卸除目錄,您必須是目錄的擁有者。

目錄總管

您必須先刪除目錄中的所有架構,才能 information_schema 刪除目錄。 這包括自動建立 default 的架構。

  1. 登入連結至中繼存放區的工作區。
  2. 按兩下 [目錄圖示目錄]。
  3. 在 [ 目錄 ] 窗格中,按下左側您想要刪除的目錄。
  4. 在詳細數據窗格中,按兩下 [建立資料庫] 按鈕左側的三點功能表,然後選取 [刪除]。
  5. 在 [ 刪除目錄 ] 對話框中,按兩下 [ 刪除]。

Sql

在筆記本或 Databricks SQL 編輯器中執行下列 SQL 命令。 括弧中的項目是選擇性專案。 取代預留位置 <catalog-name>

如需參數描述,請參閱 DROP CATALOG

如果您在不使用 選項的情況下CASCADE使用 DROP CATALOG ,您必須先刪除目錄中的所有架構,才能information_schema刪除目錄。 這包括自動建立 default 的架構。

DROP CATALOG [ IF EXISTS ] <catalog-name> [ RESTRICT | CASCADE ]

例如,若要刪除名為 vaccine 的目錄及其架構:

DROP CATALOG vaccine CASCADE

管理預設目錄

已針對針對 Unity 目錄啟用的每個工作區設定預設目錄。 默認目錄可讓您執行資料作業,而不需要指定目錄。 如果您在執行資料作業時省略最上層目錄名稱,則會假設預設目錄。

工作區管理員可以使用 管理員 設定 UI 來檢視或切換預設目錄。 您也可以使用 Spark 設定來設定叢集的預設目錄。

未指定類別目錄的指令會 GRANT CREATE TABLE ON SCHEMA myschema TO mygroup以下欄順序評估目錄:

  1. 是否使用 USE CATALOG 語句或 JDBC 設定來設定工作階段的目錄?
  2. Spark 組態 spark.databricks.sql.initial.catalog.namespace 是在叢集上設定的嗎?
  3. 叢集是否已設定工作區預設目錄?

啟用 Unity 目錄時的預設目錄設定

最初為工作區設定的預設目錄取決於您針對 Unity 目錄啟用工作區的方式:

  • 針對自動為 Unity 目錄啟用的某些工作區, 工作區目錄 已設定為預設目錄。 請參閱 自動啟用 Unity 目錄
  • 針對所有其他工作區,目錄 hive_metastore 已設定為預設目錄。

如果您要從Hive中繼存放區轉換至現有工作區內的 Unity 目錄,通常使用 做為預設目錄, hive_metastore 以避免影響參考 Hive 中繼存放區的現有程式代碼。

變更預設目錄

工作區管理員可以變更工作區的預設目錄。 具有建立或編輯叢集許可權的任何人都可以為叢集設定不同的預設目錄。

警告

變更預設目錄可能會中斷相依的現有數據作業。

若要為工作區設定不同的預設目錄:

  1. 以工作區系統管理員身分登入您的工作區。
  2. 按兩下工作區頂端列中的使用者名稱,然後從下拉式清單中選取[設定]。
  3. 按一下 [進階] 索引標籤。
  4. 在工作區數據列的預設目錄上,輸入目錄名稱,然後按兩下 [儲存]。

重新啟動 SQL 倉儲和叢集,變更才會生效。 所有新的和重新啟動的 SQL 倉儲和叢集都會使用此目錄作為工作區預設值。

您也可以在叢集上設定下列 Spark 組態,以覆寫特定叢集的預設目錄。 此方法不適用於 SQL 倉儲:

spark.databricks.sql.initial.catalog.name

如需指示,請參閱 Spark組態

檢視目前的預設目錄

若要取得工作區目前的預設目錄,您可以在筆記本或 SQL 編輯器查詢中使用 SQL 語句。 工作區管理員可以使用 管理員 設定 UI 取得預設目錄。

管理員設定

  1. 以工作區系統管理員身分登入您的工作區。
  2. 按兩下工作區頂端列中的使用者名稱,然後從下拉式清單中選取[設定]。
  3. 按一下 [進階] 索引標籤。
  4. 在工作區數據列的預設目錄上,檢視目錄名稱。

Sql

在 SQL 倉儲或 Unity 目錄相容叢集上執行的筆記本或 SQL 編輯器查詢中執行下列命令。 只要會話上未 USE CATALOG 設定語句或 JDBC 設定,而且叢集未 spark.databricks.sql.initial.catalog.namespace 設定任何組態,就會傳回工作區預設目錄。

SELECT current_catalog();