FILE 類型與非結構化資料

Important

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

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

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

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

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

FILE 元資料與儲存

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

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

下圖展示了一個範例的管理 FILE 欄位,包含路徑與大小的中繼資料,以及對儲存中檔案的參考:

片段表中影片欄位以檔案類型儲存,顯示為路徑與大小對。箭頭將每列連結到儲存中的檔案,說明資料表與檔案之間的受控參考。

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

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

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

校驗

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

校驗碼並不總是有。 當物件儲存回傳 ETAGcopy_fileto_filecreate_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 EXTERNAL 欄位則指向 Unity 目錄卷中現有的檔案。 檔案是由 Unity Catalog 的磁碟權限保護,但它們的生命週期不由 Unity Catalog 管理,也不會被複製。 當你需要參考檔案而不移動資料或干擾從現有磁碟區讀取工具時,請使用此方法。
  • FILE MANAGED 欄位將檔案複製到管理儲存空間。 將 table 屬性設 databricks.filespace-preview 為 Unity Catalog 的管理卷路徑作為儲存。 當你想要簡化權限,並透過表格管理,適用於僅透過表格存取檔案的工作負載時,可以使用此方法,例如機器學習訓練或檢索增強產生(RAG)。 關於擷取模式,請參閱「 檔案擷取」作為檔案類型

查詢時,外部檔案與受管理檔案並無差別。

下圖展示了該類型如何 FILE 將你的程式碼連接到雲端物件儲存中的檔案:

FILE 類型架構示意圖。客戶端介面如 Python、SQL、Scala 和 UDF 使用單一檔案類型,支援懶惰載入。此類型有兩種:FILE EXTERNAL,檔案系統管理生命週期;以及 FILE MANAGED,UC 透過資料表優化治理。外部檔案會對應到以卷級管理的外部磁碟區,而管理檔案則會對應到由表格層級管理的檔案空間,兩者皆存在於雲端物件儲存(如 S3、ADLS 或 Google Cloud Storage)中。

FILE EXTERNAL

FILE EXTERNAL 欄位是指向已存在於 Unity 目錄卷中的檔案的參考。

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

外部檔案會將每個資料表列映射到其在 Unity 目錄卷中現有路徑上的檔案:

一張UC卷的示意圖,包含試驗檔案,並依階段資料夾組織,並映射到外部檔案欄位。每個資料表列依檔案的卷路徑參考,並新增結構化欄位,如隊列與研究階段。

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 MANAGED

FILE MANAGED 欄位會儲存檔案副本, FileSpace這是一個你為表格宣告作為管理儲存的 Unity 目錄卷。 它們的生命週期與引用它們的表格綁定。

以下行為適用於 FILE MANAGED

  • 宣告 需要 FileSpace table databricks.filespace-preview 屬性。
  • 讀取或寫入受管理檔案需要同時存取資料表及支援該 FileSpace檔案的磁碟區。
  • 不支援自動垃圾回收無參考檔案的功能。

儲存在外部來源如 SharePoint、Google Drive、OneDrive 和 SFTP 的非結構化檔案,必須先以受管檔案形式擷取,才能將它們用於函ai_parse_document使用者定義函數(UDF)等函式。 關於擷取模式,請參閱「 檔案擷取」作為檔案類型

要使用受管理檔案,請建立一個有FILE MANAGED欄位的表格,並透過將 table 屬性設定databricks.filespace-preview為磁碟區路徑來宣告一個磁碟區:FileSpace

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

完整範例請參考以下 FILE MANAGED 範例。 檔案 FileSpace 的生命週期與參考它們的列綁定。 刪除這些列後,檔案才有資格進行垃圾回收。

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欄位會失敗。

治理與生命週期比較

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

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

FILE 類型的使用案例

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

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

下一步