FILE 類型與非結構化資料

Important

這項功能位於 測試版 (Beta) 中。 工作區管理員可以從 「預覽 」頁面控制對此功能的存取。 請參閱 管理 Azure Databricks 預覽。

FILE 型別儲存一個受控的非結構化檔案參考,並包含路徑與大小等元資料。 在 Unity 目錄中使用 FILE 欄位來存放文件、圖片和音訊,並列結構化資料。

有了 FILE MANAGED 欄位,Unity Catalog 會儲存檔案的副本並用表格來管理:刪除列後,參考的檔案才有資格進行垃圾回收,因此表格和檔案會保持同步。

關於類型參考,請參見 FILE 類型

下圖顯示一個 FILE 命名 video 欄位,與結構化欄位如路線、場景描述及危險標籤並列:

一個包含駕駛片段的表格,其中影片欄為 FILE 類型。每一列都將結構化欄位(片段 ID、路線、場景描述、危險標籤和嵌入)與影片檔案參照配對,該參照會顯示縮圖和大小,例如 1.8 GB。

FILE 元資料與儲存

對於每個資料列,FILE 類型會儲存中繼資料,以及指向儲存體中該檔案的受控連結。 一個 FILE 值包含 urisizecontent_typechecksum 元資料欄位。 元資料查詢不需要完整讀取檔案,提升查詢效能。

你可以將數值傳FILEAI 函式,例如 functionai_parse_document,以及使用者定義函數(UDF)。

下圖顯示一個受管理的 FILE 欄位範例,其中包含路徑和大小中繼資料,以及對儲存體中檔案的參照:

片段資料表中,影片欄以 FILE 類型儲存,並顯示為路徑與大小的配對。箭頭將每一列連結到其在儲存體中的檔案,顯示資料表與檔案之間受管控的參照關係。

元資料與內容存取

一個 FILE 價值分為兩部分,且對每個部分的存取方式不同:

  • 檔案中繼資料(uri、、 content_typesizechecksum和 )會儲存在資料表本身的資料檔案中。 任何桌上有 SELECT 的人都可以讀取其內容。
  • 檔案內容會保留在儲存空間。 若要讀取它們,需要存取 FILE EXTERNAL 所在基礎磁碟區上的檔案:READ VOLUME,或同時存取資料表以及作為 FILE MANAGEDFileSpace 後端的磁碟區。

FILE 值轉換為 BINARYSTRING、傳遞給 AI 函式或 UDF,以及在結果表中預覽,皆會讀取其檔案內容。 由於中繼資料是資料表的一部分,即使無法存取內容,任何能查詢資料表的人都能看到檔案的路徑與大小。

要預覽查詢結果中的檔案,請參見「 FILE 欄位中的預覽檔案」。

為什麼要用 FILE 而不是 BINARY 或 STRING

下表詳細說明處理大型非結構化檔案時BINARYSTRING的挑戰:

欄位類型 Description 圖表
BINARY 每次讀取時都會將整個物件實體化,即使你只需要檔案大小或路徑等中繼資料。 這導致不必要的計算和緩慢的查詢。 影片欄位的片段表以二進位儲存。每個多GB影片的原始位元組會直接在欄位中內嵌。
STRING 儲存一個沒有元資料(如大小或版本資訊)的檔案路徑,且資料表與檔案之間沒有受控的連結。 如果其他工作負載移除該檔案,該資料表的資訊會過時。 如果你移除某一列資料表,該參考檔案會一直存在儲存空間,直到你手動移除為止。 影片欄位以 STRING 路徑儲存的片段資料表,例如 s3://.../NW-0142。其中有一條路徑已不再對應到該磁碟區中的檔案,這顯示出字串路徑無法保證檔案一定存在,而且治理機制未與檔案連結。

校驗

欄位 checksum 是檔案位元組的完整性標記,形式 <prefix>:<digest>為 。 用它來比較檔案或確認檔案沒有變動。 讀取器會忽略帶有未識別前綴的校驗碼。

校驗碼並不總是有。 to_file 函式create_file 函式以及 函式會在物件儲存體傳回 時填入校驗和。 list_files table-valued 函式read_files table-valued函式 不會填入校驗和。

checksum 欄位使用以下其中一個前綴:

前綴 摘要編碼 Description
ETAG Opaque 物件儲存的 eTag 是整個檔案的。 由商店逐字提供,僅用於平等比較,且不可重新計算。
MD5 小寫十六進位 MD5摘要(RFC 1321),包含32個十六進位字元。
CRC32 小寫十六進位 一個 CRC32 校驗碼(RFC 2083),8 個十六進位字元。
CRC32C 小寫十六進位 一個 CRC32C 校驗碼(RFC 3385),8 個十六進位字元。
SHA-256 小寫十六進位 一個 SHA-256 摘要(RFC 6234),64 個十六進位字元。

例如,MD5 校驗碼看起來像 MD5:d41d8cd98f00b204e9800998ecf8427e,而物件儲存體的 eTag 則看起來像 ETAG:"686897696a7c876b7e",其中包含物件儲存體回傳的前後雙引號。

選擇 FILEBINARY 之間的項目

下表比較了處理非結構化檔案的各種選項:

欄位類型 價值 應用案例
FILE 一個受控的檔案參考,加上元資料(urisizecontent_typechecksum, )。 用於管理及處理非結構化檔案和結構化資料,並將檔案傳遞給內建函式和 AI 函式。
BINARY 檔案的原始位元組,內嵌在欄位中。 用於直接儲存在資料檔中的小型物件(預設最高可達 64 KB)。 當你需要低元資料負擔和簡化檔案管理時,這很有用。 例如,可以用它來儲存與列資料相連的縮圖。

受管理檔案和外部檔案

FILE 類型支援兩種檔案管理方式:

  • FILE MANAGED 欄位將檔案複製到管理儲存空間。 權限會透過表格進行簡化與管理。 當你刪除列或更新資料列以參考不同檔案時,未被引用的檔案就有資格進行垃圾回收,因此資料表和檔案會保持同步。此方法適用於透過資料表存取檔案的工作負載,例如機器學習訓練或檢索增強生成(RAG),以及從外部來源擷取的檔案。 如需了解擷取模式,請參閱 以 FILE 類型擷取檔案
  • FILE EXTERNAL 欄位則指向 Unity 目錄卷中現有的檔案。 檔案是由 Unity Catalog 的磁碟權限保護,但它們的生命週期不由 Unity Catalog 管理,也不會被複製。 當你需要參考檔案而不移動資料或干擾從現有磁碟區讀取工具時,請使用此方法。

Azure Databricks 建議FILE MANAGED適合需要檔案層級權限與內建合規性的工作負載:每個檔案的存取權由參考資料表管理,刪除資料列後,該檔案才有資格進行垃圾回收。 當檔案必須保留在其現有的磁碟區路徑中,以供在資料表外部讀取這些檔案的工具使用時,請使用 FILE EXTERNAL

查詢時,管理檔案與外部檔案沒有差別。

下圖顯示此類型如何透過 FILE 將你的程式碼連結至雲端物件儲存中的檔案:

FILE 類型架構示意圖。Python、SQL、Scala 和 UDF 用戶端使用單一 FILE 類型,可讀取中繼資料而無需擷取檔案位元組。FILE MANAGED 會將檔案儲存在 FileSpace 中,其存取權受資料表層級控管,而刪除資料列後,檔案便符合垃圾回收條件。FILE EXTERNAL 會參照 UC 磁碟區中現有路徑上的檔案,其存取權受磁碟區權限控管。這兩種模式都會將檔案儲存在雲端物件儲存體中,例如 S3、ADLS 或 Google Cloud Storage。

FILE MANAGED

FILE MANAGED 資料行會將檔案副本儲存在 FileSpace 中;FileSpace 是一個為供資料表作為受控儲存體而宣告的 Unity Catalog 磁碟區。 它們的生命週期與參考資料表綁定:刪除資料列後,被參考的檔案有資格進行垃圾回收,因此資料表與檔案保持同步。

以下行為適用於 FILE MANAGED

  • 宣告 FileSpace 需要 databricks.filespace-preview 資料表屬性。
  • 讀取或寫入受管理檔案,需要同時存取資料表,以及作為 FileSpace 後端的磁碟區。
  • Beta 版不支援對未被參照的檔案進行自動垃圾回收。

儲存在 SharePoint、Google Drive、OneDrive 和 SFTP 等外部來源中的非結構化檔案,必須先擷取為受管檔案,之後才能搭配函ai_parse_document使用者定義函數(UDF)等功能使用。 如需了解擷取模式,請參閱 以 FILE 類型擷取檔案

若要使用受管理檔案,請建立具有 FILE MANAGED 資料行的資料表,並藉由將 databricks.filespace-preview 資料表屬性設為磁碟區路徑,將磁碟區宣告為 FileSpace

'databricks.filespace-preview' = '/Volumes/<catalog>/<schema>/<volume_name>/<optional_path>'

完整範例請參考以下 FILE MANAGED 範例。

FILE MANAGED 範例

要建立一個有欄位 FILE MANAGED 的資料表:

CREATE TABLE reports (id BIGINT, file FILE MANAGED)
  TBLPROPERTIES ('databricks.filespace-preview' = '/Volumes/my_catalog/my_schema/my_managed_volume/');

要在現有資料表中新增 FILE MANAGED 欄位,請先設定 databricks.filespace-preview table 屬性再新增欄位,如下程式碼所示:

ALTER TABLE reports SET TBLPROPERTIES ('databricks.filespace-preview' = '/Volumes/my_catalog/my_schema/my_managed_volume/');

ALTER TABLE reports ADD COLUMN attachment FILE MANAGED;

在沒有FileSpace的資料表中新增FILE MANAGED欄位會失敗。

刪除未參照的受管理檔案

因為不支援自動垃圾回收,請自己刪除未被引用的檔案。 以下筆記本會找出 FileSpace 中沒有任何資料表版本參考的檔案,並可選擇刪除這些檔案:

FileType 垃圾回收筆記本

拿筆記本

FILE EXTERNAL

FILE EXTERNAL 欄位是對已存在於 Unity Catalog 磁碟區中的檔案的參照。

如果你擁有該卷所需的權限,就可以更新或刪除這些檔案。 Databricks 建議你使用不可變檔案。 資料表授權會暴露檔案元資料,但讀取檔案位元組也需要對底層磁碟區擁有 READ VOLUME 權限。

外部檔案會將每個資料表資料列對應至 Unity Catalog 磁碟區中其現有路徑上的檔案:

一張 UC 磁碟區的示意圖,其中包含按階段資料夾整理的試驗檔案,並對應至 EXTERNAL FILE 欄。資料表中的每一列都透過其磁碟區路徑參照一個檔案,並加入結構化欄位,例如群組和研究階段。

FILE EXTERNAL 範例

要建立一個有欄位 FILE EXTERNAL 的資料表:

CREATE TABLE documents (id BIGINT, file FILE EXTERNAL);

若要將 FILE EXTERNAL 欄新增至現有資料表:

ALTER TABLE documents ADD COLUMN file FILE EXTERNAL;

要從磁碟區建立並填充資料表,並為每個檔案指派唯一 ID:

CREATE TABLE documents AS
  SELECT monotonically_increasing_id() AS id, file
  FROM list_files('/Volumes/samples/sec/contracts/');

治理與生命週期比較

下表比較了如何FILE MANAGEDFILE EXTERNAL管理檔案存取及處理檔案生命週期:

欄類型 FILE MANAGED FILE EXTERNAL
檔案存取控制 受資料表與磁碟區的權限管控,例如資料表上的 SELECT 與磁碟區上的 READ VOLUME 受大量授權權限規範,例如 READ VOLUME
生命週期與記憶體回收 檔案會與參照它們的資料列建立關聯。 刪除這些列後,檔案才有資格進行垃圾回收。 不支援自動垃圾回收。 你自己管理檔案。 刪除資料表列不會影響卷內底層檔案。

FILE 類型使用案例

管理型與外部 FILE 型態皆針對使用非結構化資料的應用場景,解決了以下挑戰:

挑戰 支援型態FILE Benefits
檔案太大,無法以 BINARY 形式內嵌儲存 FILE MANAGEDFILE EXTERNAL 欄位 FILE 儲存參考資料,因此當 AI 函式或 UDF 處理檔案時,檔案才會被讀取。 這樣可避免將大型物件直接具現化在表格中。
檔案系統與資料表之間的生命週期與治理脫節 FILE MANAGED Azure Databricks 將每個檔案的生命週期綁定到資料表,因此刪除資料列後,檔案才有資格進行清理,而非將孤立檔案留在儲存空間。
需要檔案維持在同一位置的並行工作負載 FILE EXTERNAL 檔案會保留在現有的磁碟區路徑中,不受資料表生命週期的影響,因此其他會讀取相同檔案的工具也不會受到干擾。

下一步