共用方式為


建立外部位置以將雲端記憶體連線到 Azure Databricks

本文說明如何在 Unity 目錄中設定外部位置物件,以控制從 Azure Databricks 存取雲端記憶體。

外部位置概觀

外部位置會將 記憶體認證 與雲端物件記憶體容器產生關聯。 外部位置可用來定義:

  • 受控數據表和磁碟區的受控儲存位置。 受控儲存位置可以存在於中繼存放區、目錄或架構層級。 請參閱 在 Unity 目錄中指定受控儲存位置。

  • 外部數據表和外部磁碟區的位置。

外部位置可以參考 Azure Data Lake Storage 記憶體容器、AWS S3 貯體或 Cloudflare R2 貯體中的記憶體。

下圖顯示外部位置如何參考儲存體認證和雲端儲存體位置。

儲存體認證、外部位置和雲端儲存體之間的關係

在此圖中:

  • 每個外部位置都會對應一個儲存憑證和一個雲端儲存位置。
  • 一個儲存認證可以被多個外部位置引用。 儲存憑證 1 會授與路徑 bucket/tables/*下所有專案的存取權,因此 外部位置 A外部位置 B 都會參考它。

外部位置建立概觀

您可以使用下列任一介面來建立外部位置:

  1. 目錄總管

    此選項提供圖形化UI。 您可以使用目錄總管來建立參考的外部位置:Azure Data Lake Storage 容器、S3 貯體(只讀)、Cloudflare R2 貯體和 DBFS 根目錄(舊版)

  2. 在筆記本或 Databricks SQL 查詢中使用的 SQL 命令

  3. The Databricks CLI

  4. Terraform

本文涵蓋選項 1 和 2。

Note

將數據儲存在 DBFS 根 儲存位置是一種舊有的做法,Databricks 不建議這樣做。 不過,如果您的工作區確實將數據儲存在 DBFS 根目錄中,您可以建立外部位置,以使用 Unity 目錄控管該數據的存取權。 如需詳細資訊,請參閱連線到 DBFS 根外部位置 (舊版)。

如需使用外部位置的詳細資訊,以及記憶體認證與外部位置之間的關聯性,請參閱 使用 Unity 目錄連線到雲端物件記憶體

開始之前

Prerequisites:

  • 您必須先建立 Azure Data Lake Storage 儲存器容器、AWS S3 貯體或 Cloudflare R2 貯體,以作為外部位置,才能在 Azure Databricks 中建立外部位置物件。

    • 您作為外部位置使用的 Azure Data Lake Storage 記憶體帳戶必須具有階層式命名空間。

    • 您無法使用 Azure 儲存體容器(已啟用不可變性原則 WORM - 寫入一次、讀取多次)作為外部存放區。 Unity Catalog 需要對儲存體容器具有 DELETE 許可權,但不可變性原則會阻止這些許可權。 如需不變性原則的詳細資訊,請參閱 設定容器的不變性原則

    • 如果儲存體帳戶上已停用公用網路存取,您必須啟用 [允許 Azure 信任的服務] 選項,以允許 Azure Databricks 連線到儲存體帳戶。 您可以使用 Azure CLI 來設定此設定:

      # Check current network rule set
      az storage account show --name <storage_account_name> --resource-group <resource_group_name> --query "networkRuleSet"
      
      # Set bypass for Azure Services
      az storage account update \
        --name <storage_account_name> \
        --resource-group <resource_group_name> \
        --bypass AzureServices
      
  • 請勿在 S3 貯體名稱中使用點表示法(例如 incorrect.bucket.name.notation), 雖然 AWS 允許桶名稱包含點,但 Databricks 不支援使用點分隔表示的 S3 儲存桶。 包含點的桶可能會導致與 Delta Sharing 等功能的相容性問題,因為 SSL 憑證驗證失敗。 如需詳細資訊,請參閱 AWS 貯體命名最佳做法

  • 外部位置路徑必須只包含標準 ASCII 字元(字母A–Z、、a–z數位0–9和常見的符號,例如 /、、 _-

權限要求

  • 您必須在中繼資料庫和外部位置內參考的儲存認證上擁有 CREATE EXTERNAL LOCATION 許可權。 中繼存放區管理員預設擁有CREATE EXTERNAL LOCATION中繼存放區的權限。
  • 如果您要建立 DBFS 根儲存位置的外部位置,系統可以為您建立儲存體認證,但您必須是工作區管理員。如需詳細資訊,請參閱 連線到 DBFS 根外部位置 (舊版)

選項 1:使用目錄總管建立外部位置

您可以使用目錄總管手動建立外部位置。

許可權和必要條件: 請參閱 開始之前。

若要創建外部位置:

  1. 登入連接至中繼資料庫的工作區。

  2. 在提要欄位中,按兩下 [資料] 圖示。目錄

  3. 點選 外部資料 > 按鈕,前往 外部地點 標籤,點選 建立地點

  4. 輸入外部位置名稱

  5. 選取 記憶體類型Azure Data Lake StorageS3 (只讀)R2DBFS 根目錄。

    將數據儲存在 DBFS 根目錄中是一種未認可的舊版做法。 如需詳細資訊,請參閱連線到 DBFS 根外部位置 (舊版)。

  6. 在 [URL] 下,輸入或選取外部位置的路徑。

    針對 Azure Data Lake Storage、S3 和 R2,您有下列選項:

    • 若要從現有的 DBFS 載入點複製容器路徑,請點擊 [從 DBFS 複製]

    • 如果您未從現有的裝入點複製,請使用 [URL] 字段來輸入您想要作為外部位置使用的容器或貯體路徑。

      例如,abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path>r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>

    針對 DBFS 根目錄:

    • 系統會將子路徑填入 DBFS 根目錄。 如果您是工作區管理員,系統也會為您建立記憶體認證。

    請參閱連線至 DBFS 根外部位置 (舊版)。

  7. 選取授與外部位置存取權的記憶體認證。

    Note

    如果您的外部位置是 DBFS 根目錄,而您是工作區管理員,系統會為您建立記憶體認證,而且您不需要選取一個認證。

    如果您沒有記憶體認證,您可以建立一個:

    1. 在 [記憶體認證] 下拉式清單中,選取 [+ 建立新的記憶體認證

    2. 您輸入的認證資訊取決於記憶體類型:

      針對 Azure Data Lake Storage,輸入存取連接器標識碼和(選擇性地)使用者指派的受控身分,以賦予儲存位置的存取權。 請參閱 建立可存取 Azure Data Lake Storage 的記憶體認證

      針對 Cloudflare API 令牌,輸入 Cloudflare 帳戶、存取密鑰標識碼和秘密存取金鑰。 請參閱 建立記憶體認證以連線到 Cloudflare R2

      輸入 IAM 角色 ARN,以授予對 AWS S3 存放位置的存取權限。 請參閱建立記憶體認證以連線至 AWS S3(唯讀)。

  8. (選擇性)如果您想要讓使用者具有外部位置的唯讀存取權,請按兩下 [進階選項 ],然後選取 [ 只讀]。 如需詳細資訊,請參閱 將外部位置標示為唯讀

    參考 AWS S3 路徑的外部位置本質上是唯讀的。

  9. (選擇性)如果外部位置適用於 Hive 中繼資料庫聯合目錄,請按一下 [進階選項] ,然後啟用 [後援模式]

    請參閱 在外部位置上啟用後援模式

  10. (僅限 AWS S3 位置的選擇性)如果 S3 貯體需要 SSE 加密,您可以設定加密演算法,以允許 Unity 目錄中的外部資料表和磁碟區存取 S3 貯體中的數據。

    如需指示,請參閱在外部位置上設定加密演算法(僅限 AWS S3)。

  11. (選擇性)若要啟用在外部位置訂閱變更通知的能力,請按兩下 [ 進階選項 ],然後選取 [ 啟用檔案事件]。

    如需詳細資訊,請參閱 (建議) 啟用外部位置的檔案事件

  12. 點擊 建立

  13. (選擇性)將外部位置系結至特定工作區。

    根據預設,任何具有特權的使用者都可以在任何連接到中繼存放區的工作區上使用外部位置。 如果您想要只允許從特定工作區存取,請移至 [ 工作區] 索引 標籤並指派工作區。 請參閱 (選擇性) 將外部位置指派給特定工作區

  14. 移至[權限] 索引標籤,以取得使用外部位置的權限。

    若要讓任何人使用外部位置,您必須授與許可權:

    • 若要使用外部位置將受控記憶體位置新增至中繼存放區、目錄或架構,請授與 CREATE MANAGED LOCATION 許可權。
    • 若要建立外部資料表或磁碟區,請授與 CREATE EXTERNAL TABLECREATE EXTERNAL VOLUME
    1. 請按一下 授權
    2. 在 [授與] 對話框上<external location>,選取 [主體] 欄位中的使用者、群組或服務主體,然後選取您要授與的許可權。
    3. 請按一下 授權

選項 2:使用 SQL 建立外部位置

若要使用 SQL 建立外部位置,請在筆記本或 SQL 查詢編輯器中執行下列命令。 請替換預留值中的內容。 如需必要的許可權和必要條件,請參閱 開始之前。

  • <location-name>:外部位置的名稱。 如果 location_name 包含特殊字元,例如連字元 (-),它必須以反引號 (` `) 括住。 請參閱 名稱
  • <bucket-path>:您雲端租用戶中此外部位置授與存取權的路徑。 例如,abfss://my-container-name@my-storage-account.dfs.core.windows.net/<path>r2://my-bucket@my-account-id.r2.cloudflarestorage.com/<path>
  • <storage-credential-name>:授權讀取和寫入記憶體容器或貯體路徑的記憶體認證名稱。 如果記憶體認證名稱包含特殊字元,例如連字元 (-),則必須以反引號 (` `) 括住。
CREATE EXTERNAL LOCATION [IF NOT EXISTS] `<location-name>`
URL '<bucket-path>'
WITH ([STORAGE] CREDENTIAL `<storage-credential-name>`)
[COMMENT '<comment-string>'];

如果您想要限制帳戶中特定工作區的外部位置存取,也稱為工作區系結或外部位置隔離,請參閱 (選擇性) 將外部位置指派給特定工作區

(選擇性)將外部位置指派給特定工作區

根據預設,外部位置可從中繼存放區中的所有工作區存取。 這表示如果使用者已獲授與該外部位置的權限(例如 READ FILES),他們可以從附加至中繼存放庫的任何工作區使用該權限。 如果您使用工作區來隔離用戶數據存取,您可能只想要允許從特定工作區存取外部位置。 這項功能稱為工作區系結或外部位置隔離。

將外部位置系結至特定工作區的典型使用案例包括:

  • 確保擁有 CREATE EXTERNAL TABLE 包含生產數據之外部位置許可權的數據工程師只能在生產工作區中在該位置上建立外部數據表。
  • 確保具有 READ FILES 權限、可以存取包含敏感資料之外部位置的數據工程師,只能使用特定工作區來存取該資料。

如需如何依工作區限制其他類型的數據存取的詳細資訊,請參閱 限制特定工作區的目錄存取。

Important

在行使對外部位置的許可權時,會參考工作區系結。 例如,如果使用者從CREATE TABLE myCat.mySch.myTable LOCATION 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance'工作區發出 語句myWorkspace來建立外部數據表,除了一般使用者許可權檢查之外,也會執行下列工作區系結檢查:

  • 涵蓋的外部位置 'abfss://my-container-name@storage-account-name.dfs.core.windows.net/finance' 是否系結至 myWorkspace
  • 目錄myCat是否與myWorkspace的存取層級Read & Write綁定?

如果外部位置隨後從 myWorkspace取消系結,則外部數據表會繼續運作。

這項功能還允許您從中央工作區填充目錄,並通過目錄綁定使其可供其他工作區使用,而無需在這些其他工作區中開放外部位置。

當未設定無伺服器輸出控制時,僅在直接引用外部位置時才會檢查外部位置繫結,例如在CREATE TABLECREATE EXTERNAL TABLE陳述式中。

配置無伺服器輸出控制時,也會間接檢查連結,例如,當使用者存取相依於該外部位置的型錄或外部表格中的資料時。 在此情況下,外部位置的綁定必須符合目錄的綁定,或者在外部位置選擇所有工作區都可以存取,或者將isolation-mode變更為OPEN來禁用該位置。

將外部位置系結至一或多個工作區

若要將外部位置指派給特定工作區,您可以使用目錄總管或 Databricks CLI。

所需的許可權:中繼資料庫管理員、外部位置擁有者或外部位置上的 MANAGE

Note

中繼存放區管理員可以使用目錄總管查看中繼存放區中的所有外部位置,而外部位置擁有者可以看到他們在中繼存放區中擁有的所有外部位置,而不論外部位置是否指派給目前的工作區。 未指派給工作區的外部位置會顯示為灰色。

目錄檢視器

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

  2. 在提要欄位中,按兩下 [資料] 圖示。目錄

  3. 點擊 外部資料 > 按鈕,前往 外部地點 標籤。

  4. 選取外部位置,然後移至工作區標籤頁。

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

    如果您的外部位置已經綁定至一個或多個工作區,此複選框已被清除。

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

若要撤銷存取權,請移至 [ 工作區] 索引 卷標,選取工作區,然後按兩下 [ 撤銷]。 若要允許從所有工作區存取,請選取 [ 所有工作區都有存取 權] 複選框。

CLI

有兩個 Databricks CLI 命令群組,以及將一個外部位置指派給工作區所需的兩個步驟。

在下列範例中,將 <profile-name> 取代為您的 Azure Databricks 驗證組態檔名稱。 它應該包含個人存取令牌的值,以及用來產生個人存取令牌的工作區之工作區實例名稱和工作區標識符。 請參閱個人存取權杖驗證 (已淘汰)。

  1. external-locations使用命令群組的 update 指令,將外部位置的 isolation mode 設定為 ISOLATED

    databricks external-locations update <my-location> \
    --isolation-mode ISOLATED \
    --profile <profile-name>
    

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

  2. workspace-bindings使用命令群組的 update-bindings 命令,將工作區指派給外部位置:

    databricks workspace-bindings update-bindings external-location <my-location> \
    --json '{
      "add": [{"workspace_id": <workspace-id>}...],
      "remove": [{"workspace_id": <workspace-id>}...]
    }' --profile <profile-name>
    

    使用 "add""remove" 屬性來新增或移除工作區系結。

    Note

    唯讀系結 (BINDING_TYPE_READ_ONLY) 不適用於外部位置。 因此,沒有理由設定 binding_type 外部位置系結。

若要列出外部位置的所有工作區指派,請使用 workspace-bindings 命令群組的 get-bindings 命令:

databricks workspace-bindings get-bindings external-location <my-location> \
--profile <profile-name>

請參閱 REST API 參考中的工作區系結

從工作區解除綁定外部位置

使用目錄總管或 workspace-bindings CLI 命令群組撤銷工作區存取權的指示包含在 將外部位置系結至一或多個工作區中。

後續步驟