共用方式為


什麼是 Unity 目錄磁碟區?

磁碟區是 Unity 目錄物件,可對非表格式數據集啟用治理。 磁碟區代表雲端物件儲存位置中的記憶體邏輯磁碟區。 磁碟區提供存取、儲存、控管和組織檔案的功能。

雖然數據表提供表格式數據集的控管,但磁碟區會透過非表格式數據集新增治理。 您可以使用磁碟區,以任何格式儲存和存取檔案,包括結構化、半結構化和非結構化數據。

Databricks 建議使用磁碟區來管理所有非表格式數據的存取權。 如同數據表,磁碟區可以管理或外部。

重要

您無法使用磁碟區作為資料表的位置。 磁碟區僅供路徑型數據存取使用。 當您想要在 Unity 目錄中使用表格式資料時,請使用資料表。

下列文章提供有關使用磁碟區的詳細資訊:

注意

當您使用磁碟區時,除非您使用 Azure Databricks UI,例如目錄總管,否則您必須使用 SQL 倉儲或執行 Databricks Runtime 13.3 LTS 或更新版本叢集。

什麼是受控磁碟區?

受控磁碟區是在包含架構的受控儲存位置內建立的 Unity 目錄控管記憶體磁碟區。 請參閱 在 Unity 目錄中指定受控儲存位置。

受控磁碟區允許建立受控記憶體以處理檔案,而不需要外部位置和記憶體認證的額外負荷。 建立受控磁碟區時,您不需要指定位置,而且受控磁碟區中數據的所有檔案存取都是透過 Unity 目錄所管理的路徑。

什麼是外部磁碟區?

外部磁碟區是使用 Unity 目錄控管的記憶體認證,針對外部位置內的目錄註冊的 Unity 目錄控管記憶體磁碟區。

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

哪些路徑可用來存取磁碟區中的檔案?

磁碟區位於 Unity 目錄三層命名空間的第三層 (catalog.schema.volume):

Unity Catalog 物件模型圖表,著重於磁碟區

無論您使用 Apache Spark、SQL、Python 或其他語言和連結庫,存取磁碟區的路徑都相同。 這與系結至 Azure Databricks 工作區之物件記憶體中檔案的舊版存取模式不同。

存取磁碟區中檔案的路徑會使用下列格式:

/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

使用 Apache Spark 時,Azure Databricks 也支援選擇性 dbfs:/ 配置,因此下列路徑也有效:

dbfs:/Volumes/<catalog>/<schema>/<volume>/<path>/<file-name>

路徑中的序列 /<catalog>/<schema>/<volume> 會對應至與檔案相關聯的三個 Unity Catalog 物件名稱。 這些路徑元素是只讀的,用戶無法直接寫入,這表示無法使用文件系統作業建立或刪除這些目錄。 系統會自動管理它們,並與對應的 Unity 目錄實體保持同步。

注意

您也可以使用雲端記憶體 URI 存取外部磁碟區中的數據。

範例筆記本:建立和使用磁碟區

下列筆記本示範基本 SQL 語法,以建立和與 Unity 目錄磁碟區互動。

教學課程:Unity 目錄磁碟區筆記本

取得筆記本

磁碟區的保留路徑

磁碟區引進下列用來存取磁碟區的保留路徑:

  • dbfs:/Volumes
  • /Volumes

注意

路徑也會保留給 Apache Spark API 中 dbutils這些路徑的潛在錯字,包括 /volumes/Volume、、、 /volume,以及它們前面是否加上 dbfs:/。 路徑 /dbfs/Volumes 也是保留的,但無法用來存取磁碟區。

只有 Databricks Runtime 13.3 LTS 和更新版本才支援磁碟區。 在 Databricks Runtime 12.2 LTS 和以下版本中,針對路徑的作業 /Volumes 可能會成功,但可以將數據寫入附加至計算叢集的暫時記憶體磁碟,而不是如預期般將數據保存到 Unity 目錄磁碟區。

重要

如果您已將預先存在的數據儲存在 DBFS 根目錄的保留路徑中,您可以提出支援票證,以取得此數據的暫時存取權,以將其移至另一個位置。

限制

您必須使用已啟用 Unity 目錄的計算來與 Unity 目錄磁碟區互動。 磁碟區不支援所有工作負載。

注意

磁碟區不支援 dbutils.fs 散發至執行程式命令。

適用下列限制:

在 Databricks Runtime 14.3 LTS 和更新版本中:

  • 在單一使用者叢集上,您無法從 Scala 中的線程和子進程存取磁碟區。

在 Databricks Runtime 14.2 和以下版本:

  • 在以共用存取模式設定的計算上,您無法使用 UDF 來存取磁碟區。
    • Python 或 Scala 都能從驅動程式存取 FUSE,但無法從執行程式存取 FUSE。
    • 執行 I/O 作業的 Scala 程式代碼可以在驅動程式上執行,但不能在執行程式上執行。
  • 在以單一使用者存取模式設定的計算上,不支援 Scala 中的 FUSE、使用磁碟區路徑或 Scala UDF 存取數據的 Scala IO 程式代碼。 單一使用者存取模式支援 Python UDF。

在所有支援的 Databricks 運行時間版本上:

  • Unity 目錄 UDF 不支援存取磁碟區檔案路徑。

  • 您無法從 RDD 存取磁碟區。

  • 您無法搭配儲存在磁碟區中的 JAR 使用 spark-submit。

  • 您無法定義透過轉輪或 JAR 檔案內磁碟區路徑存取之其他連結庫的相依性。

  • 您無法使用 /Volumes/<catalog-name>/Volumes/<catalog-name>/<schema-name> 模式列出 Unity 目錄物件。 您必須使用包含磁碟區名稱的完整路徑。

  • REST API 的 DBFS 端點不支援磁碟區路徑。

  • 磁碟區會從 Azure Databricks 工作區中的全局搜尋結果中排除。

  • 您無法將磁碟區指定為叢集記錄傳遞的目的地。

  • %sh mv 不支援在磁碟區之間移動檔案。 請改用 dbutils.fs.mv%sh cp

  • 您無法建立具有磁碟區的自訂 Hadoop 檔案系統,這表示不支援下列專案:

    import org.apache.hadoop.fs.Path
    val path =  new Path("dbfs:/Volumes/main/default/test-volume/file.txt")
    val fs = path.getFileSystem(sc.hadoopConfiguration)
    fs.listStatus(path)
    
  • 在符合 FedRAMP 規範的 Azure Government 區域或工作區中無法使用磁碟區。

  • 您必須使用路徑格式搭配 dbfs:/ Azure Data Factory 連結庫組態面板中的配置。 例如: dbfs:/Volumes/<catalog-name>/<schema-name>/<volume-name>/file