在 Unity Catalog 中指定托管存储位置

托管存储位置在云对象存储中指定用于存储托管表数据和托管卷数据的位置。

可以将托管存储位置与元存储、目录或架构相关联。 层次结构中级别较低的托管存储位置会替代在创建托管表或托管卷时在较高级别定义的存储位置。

Databricks 建议在目录级别分配托管存储以实现逻辑数据隔离,并将元存储级别和架构级别作为选项。

为 Unity Catalog 自动启用的新工作区是在不使用元存储级托管存储位置的情况下创建的。 若要确定是否需要元存储级别的存储,请参阅Unity Catalog 的自动启用托管存储位置层次结构 以及将托管存储添加到现有元存储

什么是托管存储位置?

托管存储位置具有以下属性:

  • 托管表和托管卷将数据和元数据文件存储在托管存储位置中。
  • 托管存储位置不能与外部表或外部卷重叠。

下表介绍了如何声明托管存储位置并将其与 Unity Catalog 对象相关联:

关联的 Unity Catalog 对象 设置方式 与外部位置的关系
元存储 在创建元存储期间由帐户管理员配置。 不能与外部位置重叠。
标准目录 在创建目录期间使用 MANAGED LOCATION 关键字指定。 必须包含在外部位置内。
外部目录 创建目录后使用目录浏览器指定。 必须包含在外部位置内。
架构 使用 MANAGED LOCATION 关键字在架构创建期间指定。 必须包含在外部位置内。

注释

为工作区自动启用 Unity 目录时,Azure Databricks 会创建具有托管存储位置的工作区目录。 所有工作区用户都可以在工作区目录的default模式中创建表格和数据卷。 有关工作区目录的详细信息,请参阅 Unity 目录的自动启用

用于存储托管表和托管卷的数据和元数据的托管存储位置使用以下规则:

  • 如果包含架构具有托管位置,则数据存储在架构托管位置中。
  • 如果包含架构没有托管位置,但目录具有托管位置,则数据存储在目录托管位置中。
  • 如果包含架构和包含目录都没有托管位置,则数据存储在元存储托管位置中。

Unity Catalog 可防止位置治理重叠。 请参阅 Unity 目录卷中的路径规则和访问权限

托管存储位置、存储根和存储位置

为目录或架构指定 MANAGED LOCATION 时,所提供的位置将作为 Unity Catalog 中的存储根进行跟踪。 为了确保所有托管实体都具有唯一的位置,Unity Catalog 使用以下格式将哈希子目录添加到指定位置:

物体 路径
架构 <storage-root>/__unitystorage/schemas/00000000-0000-0000-0000-000000000000
目录 <storage-root>/__unitystorage/catalogs/00000000-0000-0000-0000-000000000000

托管存储位置的完全限定路径将作为 Unity Catalog 中的存储位置进行跟踪

可以为多个架构和目录指定相同的托管存储位置。

所需的特权

在创建目录或架构的过程中,对外部位置具有 CREATE MANAGED STORAGE 特权的用户可以配置托管存储位置。

帐户管理员可以在元存储级别添加可选的托管存储位置。

具有MANAGEUSE CATALOG特权和目录所有者的用户可以将托管存储位置添加到外部目录。

为元存储设置托管存储位置

若要为元存储设置托管存储位置,请参阅将托管存储添加到现有元存储

为标准目录设置托管存储位置

在创建目录期间使用 MANAGED LOCATION 关键字为标准目录设置托管存储位置,如以下示例所示:

CREATE CATALOG <catalog-name>
MANAGED LOCATION 'abfss://<container-name>@<storage-account>.dfs.core.windows.net/<path>/<directory>';

还可以使用目录资源管理器设置目录的托管存储位置。 请参阅创建目录

为外部目录设置托管存储位置

可以使用目录资源管理器为外部目录设置托管存储位置。

  1. 登录到链接到元存储的工作区。
  2. 单击 “数据”图标。目录
  3. 在“目录”窗格中,找到目录并单击其名称。
  4. “存储位置”下,单击“ 添加存储位置”。
  5. “选择外部位置”中,选择外部位置或创建新的位置并指定路径。
  6. 单击“ 保存”。

为架构设置托管存储位置

在创建架构期间使用 MANAGED LOCATION 关键字为架构设置托管存储位置,如以下示例所示:

CREATE SCHEMA <catalog>.<schema-name>
MANAGED LOCATION 'abfss://<container-name>@<storage-account>.dfs.core.windows.net/<path>/<directory>';

还可以使用目录资源管理器设置架构的托管存储位置。 请参阅创建架构

后续步骤

当你创建托管表和托管卷时,Unity Catalog 会自动使用托管存储位置。 请参阅 Azure Databricks for Delta Lake 和 Apache Iceberg 中的 Unity 目录托管表以及什么是 Unity 目录卷?