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

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

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

当帐户管理员创建元存储时,可以在云提供商帐户中关联 Azure Data Lake Storage Gen2 或 Cloudflare R2 存储桶中的存储位置,以将其用作托管存储位置。 目录和架构级别的托管存储位置是可选的,但 Databricks 建议在目录级别分配托管存储位置,以便进行逻辑数据隔离。 请参阅数据治理和数据隔离构建基块

重要

如果自动为你的工作区启用了 Unity Catalog,则创建 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 CATALOG <catalog>.<schema-name>
MANAGED LOCATION 'abfss://<container-name>@<storage-account>.dfs.core.windows.net/<path>/<directory>';

后续步骤

托管存储位置用于创建托管表和托管卷。 请参阅在 Unity Catalog 中创建表创建和使用卷