有关卷中文件和工作区文件的建议

将数据或文件上传或保存到 Azure Databricks 时,可以选择使用 Unity Catalog 卷或工作区文件存储这些文件。 本文包含使用这些位置的建议和要求。 有关卷和工作区文件的更多详细信息,请参阅创建和使用卷以及什么是工作区文件?

Databricks 建议使用 Unity Catalog 卷来存储数据、库和生成工件。 将笔记本、SQL 查询和代码文件存储为工作区文件。 可以将工作区文件目录配置为 Git 文件夹,以便与远程 Git 存储库同步。 请参阅 Git 与 Databricks Git 文件夹的集成。 用于测试方案的小型数据文件也可以存储为工作区文件。

下表根据文件类型或功能需求提供了关于文件的特定建议。

重要

Databricks 文件系统 (DBFS) 也可用于文件存储,但不建议这样做,因为所有工作区用户都可以访问 DBFS 中的文件。 请参阅 DBFS

文件类型

下表提供了文件类型的存储建议。 Databricks 支持许多文件格式,不仅限于作为示例在此表中提供的这些。

文件类型 建议
Databricks 对象,如笔记本和查询 存储为工作区文件
结构化数据文件,如 Parquet 文件和 ORC 文件 在 Unity Catalog 卷中存储
半结构化数据文件,如文本文件(.csv.txt)和 JSON 文件 (.json) 在 Unity Catalog 卷中存储
非结构化数据文件,如图像文件(.png.svg)、音频文件 (.mp3) 和文档文件(.pdf.docx 在 Unity Catalog 卷中存储
用于临时或早期数据浏览的原始数据文件 在 Unity Catalog 卷中存储
操作数据,例如日志文件 在 Unity Catalog 卷中存储
大型存档文件,如 ZIP 文件 (.zip) 在 Unity Catalog 卷中存储
源代码文件,如 Python 文件 (.py)、Java 文件 (.java) 和 Scala 文件 (.scala) 存储为工作区文件(如果适用),与其他相关对象(例如笔记本和查询)一起。

Databricks 建议在 Git 文件夹中管理这些文件,以便对这些文件进行版本控制和更改跟踪。
生成工件和库,例如 Python wheel (.whl) 和 JAR 文件 (.jar) 在 Unity Catalog 卷中存储
配置文件 在 Unity Catalog 卷中跨工作区存储所需的配置文件,但如果它们是 Git 文件夹中的项目文件,则将其存储为工作区文件。

功能对比

下表比较了工作区文件和 Unity Catalog 的功能。

功能 工作区文件 Unity Catalog 卷
文件访问 工作区文件只能在同一工作区中相互访问。 文件可跨工作区全局访问。
以编程方式访问 可以使用以下方法访问文件:

* Spark API
* FUSE
* dbutils
* REST API
* Databricks SDKs
* Databricks CLI
可以使用以下方法访问文件:

* Spark API
* FUSE
* dbutils
* REST API
* Databricks SDKs
* Databricks SQL 连接器
* Databricks CLI
* Databricks Terraform 提供程序
Databricks 资产捆绑包 默认情况下,捆绑包中的所有文件,包括库和 Databricks 对象(如笔记本和查询),都安全地部署为工作区文件。 权限在捆绑配置中定义。 当库超出工作区文件的大小限制时,可以自定义捆绑包以包含卷中已有的库。 请参阅 Databricks 资产捆绑包的库依赖项
文件权限级别 如果文件位于 Git 文件夹中,则权限位于 Git 文件夹级别,否则权限设在文件级别。 权限位于卷级别。
权限管理 权限由工作区 ACL 管理,并且仅限于包含它们的工作区。 元数据和权限由 Unity Catalog 管理。 这些权限适用于所有有权访问目录的工作区。
外部存储装载 不支持装载外部存储 提供通过创建外部卷来指向外部存储上预先存在的数据集的选项。 请参阅创建外部卷
UDF 支持 不支持 支持使用卷 FUSE 从 UDF 写入
文件大小 与笔记本一起存储所需的小于 500MB 的较小文件,例如源代码文件(.py.md.yml)。 根据云服务提供商确定的限制存储非常大的数据文件。
上传和下载 最多支持上传和下载 10MB。 最多支持上传和下载 5GB。
表创建支持 不能使用工作区文件作为位置创建表。 可以通过运行 COPY INTO、Autoloader 或将数据引入 Databricks 湖屋中所述的其他选项,从卷中的文件创建表。
目录结构和文件路径 文件被组织在嵌套目录中,每个目录都有自己的权限模型:

* 用户主目录,工作区中的每个用户和服务主体都有一个
* Git 文件夹
已共享*
文件被组织在卷内的嵌套目录中

请参阅如何访问 Unity Catalog 中的数据?
文件历史记录 使用工作区中的 Git 文件夹跟踪文件更改。 审核日志可用。