文件类型与非结构化数据

Important

此功能在 Beta 版中。 工作区管理员可以从 预览 页控制对此功能的访问。 请参阅 Manage Azure Databricks 预览版

FILE 类型存储对非结构化文件的受控引用,包含路径和大小等元数据。 在Unity Catalog中使用 FILE 列来存储文档、图片和音频,同时存储结构化数据。

关于类型参考,请参见 FILE 类型

下图显示了一个 FILE 名为 video 该列的列,该列与路线、场景描述和危险标签等结构化列并列:

一个驾驶片段表,视频列为FILE类型。每一行将结构化列(剪辑ID、路线、场景描述、危险标签和嵌入)与一个视频文件引用配对,该文件引用显示缩略图和大小(如1.8 GB)。

文件元数据与存储

对于每一行,类型 FILE 存储元数据和存储中文件的受控链接。 一个 FILE 值包括 urisizecontent_typechecksum 元数据字段。 元数据查询不需要完整读取文件,从而提升了查询性能。

你可以将数值传递FILEAI 函数,如函数ai_parse_document,以及用户自定义函数(UDF)。

下图展示了一个示例的管理 FILE 列,包含路径和大小元数据以及存储中文件的引用:

带有视频列的剪辑表以 FILE 类型存储,显示为路径和大小对。箭头将每行链接到存储中的文件,展示表与文件之间的受控引用。

为什么用FILE而不是BINARY或STRING

下表详细说明了处理大型非结构化文件时BINARYSTRING遇到的挑战:

列类型 Description 图表
BINARY 每次读取都能实现完整对象,即使你只需要文件大小或路径等元数据。 这导致了不必要的计算和查询速度缓慢。 带有视频列的剪辑表以二进制存储。每个多吉字节视频的原始字节会在列中内嵌实现。
STRING 存储一个没有元数据(如大小或版本信息)的文件路径,也没有表与文件之间的管理链接。 如果其他工作负载删除了该文件,表中的信息已经过时。 如果你移除了某一行表,引用的文件会一直存储在存储中,直到你手动移除它。 带有视频列的剪辑表以字符串路径存储,例如 s3://.../NW-0142。其中一条路径不再解析到卷中的某个文件,表明字符串路径并不能保证文件的存在,治理也已解除关联。

校验和

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 一个有治理的文件引用,加上元数据(urisizecontent_typechecksum, )。 用于管理和处理结构化文件与结构化数据,并将文件传递给内置和人工智能函数。
BINARY 文件的原始字节,内嵌在列中。 用于直接存储在数据文件中的小型对象(默认最大64 KB)。 当你需要低元数据开销和简化文件管理时,这非常有用。 例如,可以用它来存储与行数据相连的缩略图。

外部文件和文件管理

FILE 类型支持两种文件管理方式:

  • FILE EXTERNAL 列用于引用Unity Catalog卷中的现有文件。 文件由 Unity 目录卷权限保护,但它们的生命周期不由 Unity 目录管理,也不会被复制。 当你需要引用文件而不移动数据或干扰从现有卷读取工具时,可以使用这种方法。
  • FILE MANAGED 列将文件复制到托管存储。 将 table 属性设置为 databricks.filespace-preview Unity 目录的管理卷路径,作为存储。 当你希望简化权限并通过表管理,适用于仅通过表访问文件的工作负载时,可以使用这种方法,比如机器学习训练或检索增强生成(RAG)。 关于摄取模式,请参见 “Ingest files”作为文件类型

对于查询,外部文件和管理文件没有区别。

下图展示了该类型如何 FILE 将你的代码与云对象存储中的文件连接起来:

FILE 类型架构示意图。客户端接口如 Python、SQL、Scala 和 UDF 使用支持懒加载的单一文件类型。该类型有两种类型:FILE EXTERNAL,文件系统管理生命周期;FILE MANAGED,UC通过表优化治理。外部文件映射到以卷级管理的外部卷,而管理文件则映射到在表层级管理的文件空间,无论是在云对象存储(如 S3、ADLS 或 Google 云存储)中。

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

  • 声明 需要 FileSpacedatabricks.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 MANAGEDFILE EXTERNAL FILE 存储引用,因此当AI函数或UDF处理文件时,文件才被读取。 这样可以避免在表格中内嵌大型物体。
文件系统与表之间的脱节生命周期与治理 FILE MANAGED Azure Databricks将每个文件的生命周期绑定到表上,因此删除行后,文件有资格进行清理,而不是将孤立文件留在存储中。
需要文件保持在同一位置的并发工作负载 FILE EXTERNAL 文件会保持在现有的卷路径上,不受表生命周期影响,所以读取相同文件的其他工具不会扰。

后续步骤