路徑如何適用於 Unity 目錄所管理的數據?
本文說明 Unity 目錄中路徑重疊的限制、詳細說明 Unity Catalog 物件中資料檔的路徑型存取模式,以及 Unity 目錄如何管理數據表和磁碟區的路徑。
注意
只有 Databricks Runtime 13.3 LTS 和更新版本才支援磁碟區。 在 Databricks Runtime 12.2 LTS 和更新版本中,針對路徑的作業 /Volumes
可能會成功,但只能將數據寫入附加至計算叢集的暫時記憶體磁碟,而不是如預期般將數據保存到 Unity 目錄磁碟區。
Unity 目錄對象的路徑無法重疊
Unity 目錄會藉由防止受管理的數據目錄重疊來強制執行數據控管。 Unity 目錄會強制執行下列規則:
- 外部位置無法與其他外部位置重疊。
- 數據表和磁碟區會將數據檔儲存在外部位置或中繼存放區根位置。
- 磁碟區無法與其他磁碟區重疊。
- 數據表不能與其他數據表重迭。
- 數據表和磁碟區無法彼此重疊。
- 受控儲存位置無法彼此重疊。 請參閱 在 Unity 目錄中指定受控儲存位置。
- 外部磁碟區無法重疊受控儲存位置。
- 外部數據表無法與受控儲存位置重疊。
這些規則表示 Unity 目錄中存在下列限制:
- 您無法在另一個外部位置內定義外部位置。
- 您無法在另一個磁碟區內定義磁碟區。
- 您無法在另一個資料表內定義資料表。
- 您無法在磁碟區內的任何資料檔或目錄上定義資料表。
- 您無法在資料表內的目錄上定義磁碟區。
注意
您一律可以使用路徑型存取,從磁碟區寫入或讀取數據檔,包括 Delta Lake。 您無法將這些資料檔註冊為 Unity 目錄中繼存放區中的數據表。
受控數據表和受控磁碟區的路徑完全由 Unity 目錄管理
當您建立受控數據表或受控磁碟區時,Unity 目錄會在與包含架構相關聯的 Unity 目錄設定儲存位置中建立新目錄。 隨機產生此目錄的名稱,以避免與已經存在的其他目錄發生任何潛在衝突。
此行為與Hive中繼存放區建立受控數據表的方式不同。 Databricks 建議一律使用數據表名稱與 Unity 目錄受控數據表互動,並使用磁碟區路徑與 Unity 目錄受控磁碟區互動。
外部數據表和外部磁碟區的路徑受 Unity 目錄控管
當您建立外部資料表或外部磁碟區時,您可以在 Unity 目錄所控管的外部位置內指定路徑。
重要
Databricks 建議絕不會在外部位置的根目錄建立外部磁碟區或外部數據表。 相反地,請在外部位置內的子目錄中建立外部磁碟區和外部數據表。 這些建議應該有助於避免意外重疊的路徑。 請參閱 Unity 目錄物件的路徑無法重疊。
為了方便使用,Databricks 建議使用數據表名稱和使用磁碟區路徑的 Unity 目錄外部磁碟區與 Unity 目錄外部數據表互動。
或者,在對應 Unity Catalog 物件上具有足夠許可權的使用者可以使用完整雲端物件儲存路徑,從外部數據表或外部磁碟區存取數據。
重要
Unity 目錄會管理使用雲端 URI 存取與外部數據表或外部磁碟區相關聯的數據的所有許可權。 這些許可權會覆寫與外部位置相關聯的任何許可權。 請參閱 Unity 目錄許可權和安全性實體物件
如何在 Unity 目錄中存取資料?
Unity 目錄物件可透過物件標識碼、磁碟區路徑或雲端 URI 來存取資料。 您可以使用這些值來存取與磁碟區和數據表相關聯的數據。
Unity 目錄資料表是使用具有下列模式的三層識別碼來存取:
<catalog_name>.<schema_name>.<table_name>
Unity 目錄中的磁碟區檔案路徑為何?
磁碟區提供檔案路徑,以下列模式存取資料檔:
/Volumes/<catalog_name>/<schema_name>/<volume_name>/<path_to_file>
雲端 URI 要求使用者提供目標檔案的驅動程式、記憶體容器識別碼和完整路徑,如下列範例所示:
abfss://<container_name>@<storage_account>.dfs.core.windows.net/<path>
下表顯示 Unity Catalog 物件允許的存取方法:
Object | 物件標識碼 | 檔案路徑 | 雲端 URI |
---|---|---|---|
外部位置 | 否 | 否 | 是 |
受控資料表 | 是 | 否 | 否 |
外部資料表 (部分內容可能是機器或 AI 翻譯) | 是 | 否 | 是 |
受控磁碟區 | 否 | 是 | 否 |
外部磁碟區 | 否 | 是 | 是 |
注意
Unity 目錄磁碟區使用三層物件識別碼搭配下列模式來管理命令(例如 CREATE VOLUME
和 DROP VOLUME
):
<catalog_name>.<schema_name>.<volume_name>
若要實際使用磁碟區中的檔案,您必須使用路徑型存取。