Important
此功能在 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 Manage Azure Databricks 预览版。
该 FILE 类型存储对非结构化文件的受控引用,包含路径和大小等元数据。 在Unity Catalog中使用 FILE 列来存储文档、图片和音频,同时存储结构化数据。
关于类型参考,请参见 FILE 类型。
下图显示了一个 FILE 名为 video 该列的列,该列与路线、场景描述和危险标签等结构化列并列:
文件元数据与存储
对于每一行,类型 FILE 存储元数据和存储中文件的受控链接。 一个 FILE 值包括 uri、 size、 content_type和 checksum 元数据字段。 元数据查询不需要完整读取文件,从而提升了查询性能。
你可以将数值传递FILE给 AI 函数,如函数ai_parse_document,以及用户自定义函数(UDF)。
下图展示了一个示例的管理 FILE 列,包含路径和大小元数据以及存储中文件的引用:
为什么用FILE而不是BINARY或STRING
下表详细说明了处理大型非结构化文件时BINARYSTRING遇到的挑战:
| 列类型 | Description | 图表 |
|---|---|---|
BINARY |
每次读取都能实现完整对象,即使你只需要文件大小或路径等元数据。 这导致了不必要的计算和查询速度缓慢。 |
|
STRING |
存储一个没有元数据(如大小或版本信息)的文件路径,也没有表与文件之间的管理链接。 如果其他工作负载删除了该文件,表中的信息已经过时。 如果你移除了某一行表,引用的文件会一直存储在存储中,直到你手动移除它。 |
|
校验和
该 checksum 字段是文件字节的完整性令牌,形式 <prefix>:<digest>为 。 用它来比较文件或确认文件没有变化。 读者会忽略带有未识别前缀的校验和。
校验和并不总是可用。
to_file 函数、 create_file 函数和 copy_file 函数 在对象存储返回时 ETAG填充校验和。
list_files 表值函数 和 read_files 表值函数 不填充校验和。
该 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",包括对象存储返回的周围双引号。
在和之间 FILE 选择 BINARY
下表比较了处理非结构化文件的各种选项:
| 列类型 | 价值观 | 用例 |
|---|---|---|
FILE |
一个有治理的文件引用,加上元数据(uri, size, content_typechecksum, )。 |
用于管理和处理结构化文件与结构化数据,并将文件传递给内置和人工智能函数。 |
BINARY |
文件的原始字节,内嵌在列中。 | 用于直接存储在数据文件中的小型对象(默认最大64 KB)。 当你需要低元数据开销和简化文件管理时,这非常有用。 例如,可以用它来存储与行数据相连的缩略图。 |
外部文件和文件管理
该 FILE 类型支持两种文件管理方式:
-
FILE EXTERNAL列用于引用Unity Catalog卷中的现有文件。 文件由 Unity 目录卷权限保护,但它们的生命周期不由 Unity 目录管理,也不会被复制。 当你需要引用文件而不移动数据或干扰从现有卷读取工具时,可以使用这种方法。 -
FILE MANAGED列将文件复制到托管存储。 将 table 属性设置为databricks.filespace-previewUnity 目录的管理卷路径,作为存储。 当你希望简化权限并通过表管理,适用于仅通过表访问文件的工作负载时,可以使用这种方法,比如机器学习训练或检索增强生成(RAG)。 关于摄取模式,请参见 “Ingest files”作为文件类型。
对于查询,外部文件和管理文件没有区别。
下图展示了该类型如何 FILE 将你的代码与云对象存储中的文件连接起来:
FILE EXTERNAL
FILE EXTERNAL 列是指向 Unity 目录卷中已存在的文件的引用。
如果你对该卷拥有必要的权限,可以更新或删除这些文件。 Databricks建议你使用不可变文件。 表授予会暴露文件元数据,但读取文件的字节也需要对底层卷的 READ VOLUME 权限。
外部文件将每个表行映射到其在 Unity 目录卷中已存在路径上的文件:
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表databricks.filespace-preview属性。 - 读取或写入受管理文件需要同时访问表和支持该
FileSpace文件的卷。 - 不支持自动垃圾回收未引用文件。
存储在外部来源(如 SharePoint、Google Drive、OneDrive 和 SFTP)中的非结构化文件必须先作为托管文件被导入,才能与函数和ai_parse_document用户定义函数(UDF)等功能一起使用。 关于摄取模式,请参见 “Ingest files”作为文件类型。
使用受管理文件时,创建一个带有FILE MANAGED列的表,并通过将 table 属性设置为 databricks.filespace-preview volume 路径来声明一个卷: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 表属性,如下代码所示:
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 MANAGED访问和文件生命周期的管理FILE EXTERNAL方式:
| 列类型 | FILE EXTERNAL |
FILE MANAGED |
|---|---|---|
| 文件访问控制 | 受卷权限控制,例如 READ VOLUME。 |
受表和卷权限控制,比如 SELECT 在桌面和 READ VOLUME 卷上。 |
| 生命周期和垃圾回收 | 你自己管理文件。 删除表行不会影响卷内的底层文件。 | 文件被绑定到引用它们的行。 删除这些行后,文件才有资格进行垃圾回收。 不支持自动垃圾回收。 |
FILE 类型的用例
外部类型和托管 FILE 类型都解决了使用非结构化数据时的以下挑战:
| 挑战 | 支持类型FILE |
Benefits |
|---|---|---|
文件过大无法内联存储为 BINARY |
FILE MANAGED 或 FILE EXTERNAL |
列 FILE 存储引用,因此当AI函数或UDF处理文件时,文件才被读取。 这样可以避免在表格中内嵌大型物体。 |
| 文件系统与表之间的脱节生命周期与治理 | FILE MANAGED |
Azure Databricks将每个文件的生命周期绑定到表上,因此删除行后,文件有资格进行清理,而不是将孤立文件留在存储中。 |
| 需要文件保持在同一位置的并发工作负载 | FILE EXTERNAL |
文件会保持在现有的卷路径上,不受表生命周期影响,所以读取相同文件的其他工具不会扰。 |