适用于:
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 MANAGED 或 FILE EXTERNAL 作为列 CREATE TABLE类型。 你不能在不指定 MANAGED 或 EXTERNAL的情况下声明表列 。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 值,请参见以下函数:
-
to_file函数 从路径创建一个FILE引用。 -
try_to_file函数 从路径创建一个FILE引用,如果文件不存在,函数会返回NULL。 -
create_file函数 将内容上传到路径并返回FILE引用。 -
copy_file函数 将文件复制到目标路径并返回FILE引用。
对CASTaVARIANT或STRUCT值为: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 MANAGED或FILE EXTERNAL。 其他情况下的使用FILE:- 作为 SQL、Python 和 Scala 用户自定义函数(UDF)以及 SQL 存储过程中的参数或返回类型。
- 作为a的目标类型
CAST,来自aVARIANT或STRUCT值。 - 嵌套在
STRUCT、ARRAY、 中,则 的MAP值为 ,或VARIANT。 在VARIANT.
- 要读取文件元数据,可以使用
uri带有点符号的 、offset、sizecontent_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;