管理外部位置

本文介绍如何列出、查看、更新、授予权限、启用文件事件以及删除 外部位置

备注

Databricks 建议使用卷管理文件访问。 请参阅“什么是 Unity Catalog 卷?”。

描述外部位置

若要查看外部位置的属性(包括权限和工作区访问权限),可以使用目录资源管理器或 SQL 命令。

目录资源管理器

  1. 在边栏中,单击 目录图标目录”。

  2. 在“快速访问”页中,单击“外部数据>”按钮,然后转到“外部位置”选项卡。

  3. 单击外部位置的名称以查看其属性。

SQL

在笔记本或 Databricks SQL 编辑器中运行以下命令。 将 <location-name> 替换为外部位置的名称。

DESCRIBE EXTERNAL LOCATION <location-name>;

显示外部位置的授予

若要在外部位置显示授予,请使用如下命令。 你可以选择筛选结果以只显示指定主体的授权。

SHOW GRANTS [<principal>] ON EXTERNAL LOCATION <location-name>;

替换占位符值替:

  • <location-name>:授权读取和写入云租户中存储容器路径的外部位置的名称。
  • <principal>:帐户级用户的电子邮件地址或帐户级组的名称。

备注

如果组或用户名包含空格或 @ 符号,请使用其周围的后刻度(` `),而不是撇号。

对外部位置授予权限

本部分介绍如何使用目录资源管理器和笔记本或 SQL 查询中的 SQL 命令授予和撤销对外部位置的权限。 有关改用 Databricks CLI 或 Terraform 的信息,请参阅 Databricks Terraform 文档什么是 Databricks CLI?

你可以在外部位置授予以下权限:

  • CREATE EXTERNAL TABLE
  • CREATE EXTERNAL VOLUME
  • CREATE MANAGED STORAGE

所需权限:对外部位置中引用的元存储和存储凭据具有 CREATE EXTERNAL LOCATION 权限,或对外部位置具有 MANAGE 权限。 默认情况下,元存储管理员对元存储具有 CREATE EXTERNAL LOCATION

授予使用外部位置的权限:

目录资源管理器

  1. 在边栏中,单击 目录图标目录”。

  2. 在“快速访问”页中,单击“外部数据>”按钮,然后转到“外部位置”选项卡。

  3. 单击外部位置的名称以打开其属性。

  4. 单击“权限”。

  5. 若要向用户或组授予权限,请选择每个标识,然后单击“授予”。

  6. 若要撤销用户或组的权限,请选择每个标识,然后单击“撤销”。

SQL

在笔记本或 SQL 查询编辑器中运行以下 SQL 命令。 此示例授予创建引用外部位置的外部表的能力:

GRANT CREATE EXTERNAL TABLE ON EXTERNAL LOCATION <location-name> TO <principal>;

替换占位符值替:

  • <location-name>:授权读取和写入云租户中存储容器路径的外部位置的名称。
  • <principal>:帐户级用户的电子邮件地址或帐户级组的名称。

备注

如果组或用户名包含空格或 @ 符号,请在其周围使用反勾(而不是撇号)。 例如, 财务团队

更改外部位置的所有者

外部位置的创建者是其初始所有者。 若要将所有者更改为其他帐户级别的用户或组,请在笔记本或 Databricks SQL 编辑器中运行以下命令,或使用目录资源管理器

所需权限:外部位置所有者或具有 MANAGE 权限的用户。

替换占位符值替:

  • <location-name>:该凭据的名称。
  • <principal>:帐户级用户的电子邮件地址或帐户级组的名称。
ALTER EXTERNAL LOCATION <location-name> OWNER TO <principal>

将外部位置标记为只读

如果希望用户对外部位置具有只读访问权限,可以使用目录资源管理器将外部位置标记为只读。

将外部位置标记为只读:

  • 阻止用户写入这些外部位置中的文件,而不考虑存储凭据的 Azure 托管标识授予的任何写入权限,也不管对该外部位置授予的 Unity Catalog 权限如何。
  • 阻止用户在这些外部位置创建托管表或卷。
  • 使系统能够在创建时正确验证外部位置。

创建外部位置时,可以将外部位置标记为只读。

还可使用目录资源管理器在创建外部位置后更改只读状态:

  1. 在边栏中,单击 目录图标目录”。

  2. 在“快速访问”页中,单击“外部数据>”按钮,然后转到“外部位置”选项卡。

  3. 选择外部位置,单击Kebab menu“测试连接”按钮旁边的 ,然后选择“编辑”。

  4. 在“编辑”对话框中,单击“高级选项”并选择“限制为只读使用”选项。

  5. 单击“更新” 。

(推荐)为外部位置启用文件事件

重要

此功能目前以公共预览版提供。

如果要引入云提供商推送的更改通知,为外部位置启用托管文件事件具有以下优势:

在您开始之前

如果希望 Azure Databricks 代表你配置 Azure Data Lake Storage 中的存储队列,则你的外部位置必须引用具有足够权限的存储凭据,以完成此操作。 有关说明,请参阅下一步。

如果要在 Azure Data Lake Storage 中创建自己的存储队列,则存储凭据所表示的标识必须对这些存储队列具有以下权限:

存储队列数据贡献者

步骤 1:确认 Azure Databricks 有权访问 Azure Data Lake Storage 中的文件事件

在可以为外部位置安全对象启用文件事件之前,必须确保已将 Azure Data Lake Storage 帐户配置为授予 Azure Databricks 对它发出的文件事件的访问权限。 如果希望 Azure Databricks 为你配置 Azure Data Lake Storage 中的文件事件,还必须确保 Azure Databricks 具有适当的访问权限。

配置可以使用 Azure Databricks 和 Unity 目录访问存储位置的托管标识时,分配此访问权限是一个可选步骤。 若要确认授予对外部位置访问权限的托管身份已正确配置,请执行以下操作:

  1. 获取 Azure 托管标识 ID。

    1. 在边栏中,单击 目录图标目录”。

    2. 在“快速访问”页中,单击“外部数据>”按钮,然后转到“外部位置”选项卡。

    3. 选择外部位置。

    4. 在“ 概述 ”选项卡上,单击 “凭据 名称”。

    5. 在“存储凭据 概述 ”选项卡上,复制 连接器 ID用户分配的托管标识 ID

      你将下一步骤中使用此内容。

  2. 登录到 Azure Data Lake Storage 帐户。

  3. 转到 访问控制(IAM), 然后单击 “检查访问 ”按钮。

  4. 托管标识中,根据托管标识类型选择 用户分配的托管标识Azure Databricks 的访问连接器

  5. 搜索你在步骤 1 中复制的托管标识。

  6. 确认托管标识具有以下角色:

    • 存储 blob 数据参与者
    • EventGrid EventSubscription 参与者
    • 存储队列数据参与者:只有在希望 Azure Databricks 为你在 Azure Data Lake Storage 中创建订阅和事件时才需要。 如果未启用此角色,则必须自行创建 Azure 存储队列
  7. 如果缺少这些角色中的任何一个,请转到 “符合条件的分配 ”选项卡并添加这些角色。

有关分配这些角色的详细信息,请参阅 步骤 3:授予托管标识对文件事件的访问权限 步骤 4:授予 Azure Databricks 代表你配置文件事件的访问权限

步骤 2:使用目录资源管理器为外部位置启用文件事件

若要启用文件事件,请执行以下步骤。

  1. 在边栏中,单击 目录图标目录”。

  2. 在“快速访问”页中,单击“外部数据>”按钮,然后转到“外部位置”选项卡。

  3. 选择外部位置。

  4. 单击Kebab menu“测试连接”按钮旁边的 烤肉串菜单,然后选择“编辑”。

  5. 在“编辑”对话框中,单击“ 高级选项”。

  6. 选择“ 启用文件事件”。

  7. 选择 “文件”事件类型

    自动:(建议)如果希望 Azure Databricks 为你设置订阅和事件,请选择此选项。

    提供:如果已自行配置 Azure 存储队列 ,请选择此选项。

  8. 如果选定提供的文件事件类型,请输入现有存储队列的队列URLhttps://<storage account>.queue.core.chinacloudapi.cn/<queue>

  9. 单击“更新” 。

  10. 等待几秒钟,然后单击主外部位置编辑页面上的测试连接,以确认文件事件已成功启用。

文件事件限制

托管文件事件具有以下限制:

  • 事件吞吐量限制为每秒引入 2000 个文件。

  • 使用托管文件事件时,无法使用此选项标记云资源 resourceTags 。 相反,可以在自动加载程序服务创建队列和订阅资源后,使用云控制台标记资源。

  • 无法为 Unity Catalog 元存储库的根存储位置设置文件通知。

    具体而言,不能在 Unity 目录中未定义外部位置对象的存储位置上使用文件事件设置文件通知。 Unity Catalog的旧版本实现包含一个元存储根存储位置,该位置不与外部位置关联。 在较新的实现中,尤其是在自动启用了 Unity Catalog 的工作区上的实现中,元存储级别存储确实定义了一个外部位置,并且该存储位置支持托管文件事件。 如果你像我一样感到困惑,请参阅 Unity Catalog 的自动启用

  • 不支持 Azure Blob 存储。

修改外部位置

外部位置的所有者或具有 MANAGE 特权的用户可以更改外部位置的名称、URI 和存储凭证。

若要重命名外部位置,请执行以下操作:

在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location-name>:位置的名称。
  • <new-location-name>:位置的新名称。
ALTER EXTERNAL LOCATION <location-name> RENAME TO <new-location-name>;

若要更改云租户中外部位置指向的 URI,请执行以下操作:

在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location-name>:外部位置的名称。
  • <url>:该位置应该授权你的云租户访问的新存储 URL。
ALTER EXTERNAL LOCATION location_name SET URL '<url>' [FORCE];

即使外部表依赖于外部位置,FORCE 选项也会更改 URL。

若要更改外部位置使用的存储凭据,请执行以下操作:

在笔记本或 Databricks SQL 编辑器中运行以下命令。 替换占位符值替:

  • <location-name>:外部位置的名称。
  • <credential-name>:用来访问云租户中位置 URL 的存储凭据的名称。
ALTER EXTERNAL LOCATION <location-name> SET STORAGE CREDENTIAL <credential-name>;

删除外部位置

若要删除(丢弃)外部位置,你必须是其所有者,或者对外部位置具有 MANAGE 特权。 若要删除外部位置,请执行以下操作:

在笔记本或 Databricks SQL 编辑器中运行以下命令。 括号中的项是可选的。 将 <location-name> 替换为外部位置的名称。

DROP EXTERNAL LOCATION [IF EXISTS] <location-name>;