管理卷中的文件

本文提供了管理 Unity Catalog 中各种用户界面、工具、库和语言的文件的示例。

Databricks 建议使用卷来管理对云对象存储中非表格数据的所有访问。 非表格数据的示例包括:

  • 用于引入的数据文件,例如 CSV、JSON 和 Parquet。
  • 用于数据科学、ML 和 AI 工作负载的文本、图像和音频文件。
  • Azure Databricks 为与外部系统集成而编写的 CSV 或 JSON 项目。

可以使用卷来存储库、初始化脚本和生成项目等文件。 请参阅有关卷中文件和工作区文件的建议

使用目录资源管理器 UI 处理卷中的文件

目录资源管理器为使用 Unity Catalog 卷存储的文件提供用于常见文件管理任务的选项。

若要与卷中的文件交互,请执行以下操作:

  1. 在 Azure Databricks 工作区中,单击““目录”图标 目录”
  2. 搜索或浏览要使用的卷并将其选中。

有关创建和管理卷的详细信息,请参阅创建和管理卷

将文件上传到卷

“上传到此卷”按钮将打开一个对话框来上传文件。 请参阅将文件上传到 Unity Catalog 卷

上传的文件不能超过 5 GB。

从卷下载文件

若要从卷下载文件,请执行以下操作:

  1. 选择一个或多个文件。
  2. 单击“下载”以下载这些文件。

删除卷中的文件

若要删除卷中的文件,请执行以下操作:

  1. 选择一个或多个文件。
  2. 单击 “删除”
  3. 单击“删除”,在出现的对话框中确认删除。

创建空目录

若要在卷中创建新目录,请执行以下操作:

  1. 单击卷名右侧的 串形菜单
  2. 选择“创建目录”。
  3. 输入目录名称。
  4. 单击 “创建”

从卷中删除目录

若要从卷中删除目录,请执行以下操作:

  1. 选择一个或多个目录。
  2. 单击 “删除”
  3. 单击“删除”,在出现的对话框中确认删除。

卷的 UI 文件管理任务

单击文件名旁边的 kebab 菜单 Kebab 菜单 来执行以下操作:

  • 复制路径
  • 下载文件
  • 删除文件
  • 创建表

从卷中的数据创建表

Azure Databricks 提供了一个 UI,用于从存储在 Unity Catalog 卷中的文件或文件目录创建 Unity Catalog 托管表。

必须在目标架构中具有 CREATE TABLE 权限,并且有权访问正在运行的 SQL 仓库。

可以使用提供的 UI 进行以下选择:

  • 选择“创建新表”或“覆盖现有表”
  • 选择目标目录和架构
  • 指定表名称
  • 重写默认列名和类型,或选择排除列。

注意

单击“高级属性”可查看其他选项。

单击“创建表”以在指定位置创建表。 完成后,目录资源管理器会显示表详细信息。

以编程方式处理 Azure Databricks 上的卷中的文件

可以使用以下格式从所有受支持的语言和工作区编辑器在卷中读取和写入文件:

/Volumes/catalog_name/schema_name/volume_name/path/to/files

与卷中的文件交互的方式与任何云对象存储位置中的文件进行交互的方式相同。 这意味着,如果当前管理使用云 URI、DBFS 装载路径或 DBFS 根路径来与数据或文件交互的代码,则可以更新代码以改用卷。

注意

卷仅用于非表格数据。 Databricks 建议使用 Unity Catalog 表注册表格数据,然后使用表名读取和写入数据。

在卷中读取和写入数据

可以使用 Apache Spark、Pandas、Spark SQL 和其他 OSS 库来在卷中读取和写入数据文件。

以下示例演示如何读取存储在卷中的 CSV 文件:

Python

df = spark.read.format("csv").load("/Volumes/catalog_name/schema_name/volume_name/data.csv")

display(df)

Pandas

import pandas as pd

df = pd.read_csv('/Volumes/catalog_name/schema_name/volume_name/data.csv')

display(df)

SQL

SELECT * FROM csv.`/Volumes/catalog_name/schema_name/volume_name/data.csv`

卷中文件的实用工具命令

Databricks 提供以下工具来管理卷中的文件:

  • Databricks 实用程序中的 dbutils.fs 子模块。 请参阅文件系统实用工具 (dbutils.fs)
  • %fs magic,这是 dbutils.fs 的别名。
  • %sh magic,它允许针对卷执行 bash 命令。

有关使用这些工具从 Internet 下载文件、解压缩文件和将文件从临时块存储移动到卷的示例,请参阅从 Internet 下载数据

还可以对文件实用工具命令(如 Python os 模块)使用 OSS 包,如以下示例所示:

import os

os.mkdir('/Volumes/catalog_name/schema_name/volume_name/directory_name')

从外部工具管理卷中的文件

Databricks 提供了一套工具,用于从本地环境或集成系统以编程方式管理卷中的文件。

卷中文件的 SQL 命令

Azure Databricks 支持以下 SQL 关键字用于与卷中的文件交互:

注意

Databricks 笔记本或查询编辑器仅支持 LIST 命令。

以下 Databricks SQL 连接器和驱动程序支持管理卷中的文件:

使用 Databricks CLI 管理卷中的文件

databricks fs 中使用子命令。 请参阅 fs 命令组

注意

Databricks CLI 要求方案 dbfs:/ 位于所有卷路径之前。 例如 dbfs:/Volumes/catalog_name/schema_name/volume_name/path/to/data

使用 SDK 管理卷中的文件

以下 SDK 支持管理卷中的文件:

使用 REST API 管理卷中的文件

使用 文件 API 管理卷中的文件。

卷中文件的 REST API 示例

以下示例使用 curl 和 Databricks REST API 在卷中执行文件管理任务。

以下示例在指定卷中创建名为 my-folder 的空文件夹。

curl --request PUT "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/my-folder/" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"

以下示例创建一个名为 data.csv 的文件,其中包含卷中指定路径中的指定数据。

curl --request PUT "https://${DATABRICKS_HOST}/api/2.0/fs/files/Volumes/main/default/my-volume/my-folder/data.csv?overwrite=true" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" \
--header "Content-Type: application/octet-stream" \
--data-binary $'id,Text\n1,Hello World!'

以下示例列出指定路径中卷的内容。 此示例使用 jq 设置响应正文 JSON 的格式,以便于阅读。

curl --request GET "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq .

以下示例列出卷的指定路径中文件夹的内容。 此示例使用 jq 设置响应正文 JSON 的格式,以便于阅读。

curl --request GET "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/my-folder" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}" | jq .

以下示例打印卷的指定路径中文件的内容。

curl --request GET "https://${DATABRICKS_HOST}/api/2.0/fs/files/Volumes/main/default/my-volume/my-folder/data.csv" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"

以下示例删除卷的指定路径中的文件。

curl --request DELETE "https://${DATABRICKS_HOST}/api/2.0/fs/files/Volumes/main/default/my-volume/my-folder/data.csv" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"

以下示例删除指定卷中的文件夹。

curl --request DELETE "https://${DATABRICKS_HOST}/api/2.0/fs/directories/Volumes/main/default/my-volume/my-folder/" \
--header "Authorization: Bearer ${DATABRICKS_TOKEN}"