FILE 類型

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

Important

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

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

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

Note

FILE Type 需要在無伺服器筆記本上達到 環境版本 6 或以上。 要選擇筆記本的環境版本,請參見 選擇基礎環境。

Syntax

{ FILE MANAGED | FILE EXTERNAL }

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

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

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 VARIANT 或 STRUCT 值為 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 MANAGED 或 FILE EXTERNAL。 其他情況下的使用 FILE :
    • 作為 SQL、Python 和 Scala 使用者定義函式(UDF)以及 SQL 儲存程序中的參數或回傳類型。
    • 作為 a CASTVARIANT 或 STRUCT 值的目標類型。
    • 嵌套於 STRUCT、 ARRAY、 中,則 的值 MAP,或 VARIANT。 在 VARIANT.
  • 要讀取檔案元資料,請使用 uri、offset、sizecontent_typechecksum、 和 欄位並加上點符號,例如 。file_column.uri
  • 要從檔案中擷取結構化內容,請將一個 FILE 值傳入 ai_parse_document 函式 函式。
  • 要預覽查詢結果中檔案的內容,請參見「 FILE 欄位中的預覽檔案」。 預覽讀取檔案內容,這需要存取檔案本身,除了資料表之外。 請參閱 元資料與內容存取。

Examples

要宣告具有受管理 FILE 欄位的資料表,請將 table 屬性設 databricks.filespace-preview 為 Unity 目錄用作管理儲存的磁碟區路徑:

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

要宣告一個帶有外部 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;