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

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

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

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

为 Unity Catalog 自动启用的新工作区是在不使用元存储级托管存储位置的情况下创建的。 但是,某些功能必须使用元存储级别存储,例如使用 Delta Sharing 共享笔记本或作为 Databricks 合作伙伴使用个人暂存位置。 请参阅自动启用 Unity Catalog数据管理和数据隔离构建基块,以及创建 Unity Catalog 元存储

什么是托管存储位置?

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

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

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

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

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

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

Unity Catalog 可防止位置治理重叠。 请参阅对于 Unity Catalog 管理的数据,路径是如何工作的?

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

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

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

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

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

所需权限

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

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

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

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

为目录设置托管存储位置

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

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

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

为架构设置托管存储位置

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

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

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

后续步骤

创建托管表和托管卷时,Unity Catalog 会自动使用托管存储位置。 请参阅使用托管表什么是 Unity Catalog 卷?