FILE 類型

適用於:勾選標記為是 Databricks SQL 勾選 Databricks 執行時間 18 LTS 及以上

Important

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

FILE 別代表對非結構化檔案及其元資料的參考。 利用它來管理和處理文件、影像、音訊,以及 Unity Catalog 中的結構化資料。

FILE 類型僅支援 Delta Lake 資料表。

Note

這種 FILE 類型在無伺服器筆記本上不支援。 它支援於連接到無伺服器 Databricks SQL 倉庫的筆記本上。

Syntax

{ FILE MANAGED | FILE EXTERNAL }

當你宣告一個帶有 的欄位時,請使用 FILE MANAGEDFILE EXTERNAL 作為欄位 CREATE TABLE類型。 你無法在不指定 MANAGEDEXTERNAL的情況下宣告 為 FILE 的表格欄位。 FILE 僅允許作為 UDF、儲存程序或鑄造時的參數或回傳型別。

關於與 FILE MANAGED的比較FILE EXTERNAL,包括架構圖,請參見 FILE EXTERNAL 與 FILE MANAGED

Fields

一個 FILE 值包含以下欄位:

Field 類型 Description
uri STRING 檔案的 URI。 這場不可能是 null
offset BIGINT 檔案的偏移量以位元組為單位。
size BIGINT 檔案的大小 (以位元組為單位)。
content_type STRING 檔案的 MIME 類型(已知時)。
checksum STRING 檔案中位元組的完整性權杖,形式 <algorithm>:<digest>為 。 關於已識別的演算法,請參見 校驗和

Limits

  • 這種 FILE 類型不保證一定會下單。 你不能用欄位 FILE 作為分割欄位、叢集欄位、 MAP 鍵、連接鍵或群組表達式。 要按檔案分組,改用其 uri 欄位分組。

Literals

要建立 FILE 一個值,請參考以下函式:

CAST a VARIANTSTRUCT 值為 FILE

  • A STRUCT 必須恰好擁有這些欄位,並擁有這些名稱和類型: struct<uri:string, offset:bigint, size:bigint, content_type:string, checksum:string>
  • VARIANT A 必須包含uri場地。 其他欄位皆為可選,其他鍵則忽略。

將 投射到 FILE,而非 投射至 FILE EXTERNALFILE MANAGED或 。 目標欄位決定結果引用是外部參考還是管理參考。 當你寫入欄位的 FILE MANAGED 外部參考時,Databricks 會將其匯入管理儲存。

Notes

  • 作為頂層表格欄位, 必須 FILE 宣告為 FILE MANAGEDFILE EXTERNAL。 其他情況下的使用 FILE
    • 作為 SQL、Python 和 Scala 使用者定義函式(UDF)以及 SQL 儲存程序中的參數或回傳類型。
    • 作為 a CASTVARIANTSTRUCT 值的目標類型。
    • 嵌套於 STRUCTARRAY、 中,則 的值 MAP,或 VARIANT。 在 VARIANT.
  • 要讀取檔案元資料,請使用 urioffsetchecksumsizecontent_type、 和 欄位並加上點符號,例如 。file_column.uri
  • 要從檔案中擷取結構化內容,請將一個 FILE 值傳入 ai_parse_document 函式 函式。

Examples

要宣告一個帶有外部 FILE 欄位的表格:

CREATE TABLE attachments (id BIGINT, attachment FILE EXTERNAL);

要從已存在於某個磁碟區的檔案中填充它:

INSERT INTO attachments
  SELECT row_number() OVER (ORDER BY file.uri), file
  FROM read_files('/Volumes/my_catalog/my_schema/my_volume/', format => 'file');

使用點符號讀取檔案元資料:

SELECT attachment.uri, attachment.size, attachment.checksum
  FROM attachments;

要從結構體構造一個 FILE 值:

SELECT named_struct(
  'uri', '/Volumes/my_catalog/my_schema/my_volume/report.pdf',
  'offset', null,
  'size', CAST(19494 AS BIGINT),
  'content_type', 'application/pdf',
  'checksum', 'ETAG:v1')::FILE;