FILE 类型

适用于:检查标记为“是”的 Databricks SQL 检查标记为“是”是 Databricks Runtime 18 LTS 及更高版本

Important

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

FILE 类型表示对非结构化文件及其元数据的引用。 用它来管理和处理 Unity 目录中的文档、图片、音频以及结构化数据。

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,包括架构图,请参见外部文件和管理文件

Fields

一个 FILE 值包含以下字段:

领域 类型 Description
uri STRING 文件的URI。 这个场地不 null可能是。
offset BIGINT 一个以字节为单位的偏移量。
size BIGINT 以字节为单位的文件的大小。
content_type STRING 文件的MIME类型(已知时)。
checksum STRING 文件字节的完整性令牌,形式 <algorithm>:<digest>为 。 关于认可的算法,请参见 校验和

限制

  • 类型 FILE 不保证一定能下单。 你不能用列 FILE 作为划分列、聚类列、 MAP 键、连接键或分组表达式。 要按文件分组,就按其 uri 字段分组。

Literals

要创建一个 FILE 值,请参见以下函数:

CASTaVARIANTSTRUCT值为:FILE

  • A STRUCT 必须恰好拥有这些字段,并具有这些名称和类型: struct<uri:string, offset:bigint, size:bigint, content_type:string, checksum:string>
  • VARIANT必须包含uri场地。 其他所有字段均为可选,其他键被忽略。

铸为 FILE,而非 。FILE EXTERNALFILE MANAGED 目标列决定最终引用是外部引用还是管理引用。 当你写入 FILE MANAGED 列的外部引用时,Databricks 会将其导入托管存储。

备注

  • 作为顶层表列, FILE 必须声明为 FILE MANAGEDFILE EXTERNAL。 其他情况下的使用 FILE
    • 作为 SQL、Python 和 Scala 用户自定义函数(UDF)以及 SQL 存储过程中的参数或返回类型。
    • 作为a的目标类型 CAST ,来自a VARIANTSTRUCT 值。
    • 嵌套在 STRUCTARRAY、 中,则 的 MAP值为 ,或 VARIANT。 在 VARIANT.
  • 要读取文件元数据,可以使用uri带有点符号的 、 offsetsizecontent_type、 和 checksum 字段,例如 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;