使用 Unity Catalog 连接到云对象存储
本文概述了使用 Unity Catalog 处理数据所需的云存储连接配置。
Databricks 建议使用 Unity Catalog 卷来管理对云对象存储中存储的所有数据的访问权限。 Unity Catalog 提供了一套工具,用于配置与云对象存储的安全连接。 这些连接提供完成以下操作的访问权限:
- 将数据引入湖屋。
- 在安全云存储中创建和读取托管表。
- 注册或创建包含表格数据的外部表。
- 读取和写入非结构化数据。
警告
不要为最终用户提供对 Unity 目录托管表或卷的存储级访问权限。 这样做会损害数据安全和治理。
授予用户对 Azure Data Lake Storage Gen2 中外部位置存储的直接存储级访问权限不会遵守 Unity Catalog 授予的任何权限或维护的审核。 直接访问将绕过 Unity Catalog 的审核、世系以及其他安全和监视功能,包括访问控制和权限。 你需要负责管理通过 Azure Data Lake Storage Gen2 进行的直接存储访问,并确保通过 Fabric 为用户授予适当的权限。
对于存储 Databricks 托管表的存储桶,请避免为其使用授予直接存储级写入访问权限的所有方案。 直接通过存储修改、删除或演进任何最初由 Unity Catalog 管理的对象可能会导致数据损坏。
注意
如果工作区是在 2023 年 11 月 9 日之前创建的,则可能无法为 Unity Catalog 启用该工作区。 帐户管理员必须为工作区启用 Unity Catalog。 请参阅为工作区启用 Unity Catalog。
Unity 目录如何将对象存储连接到 Azure Databricks?
Azure Databricks 同时支持 Azure Data Lake Storage Gen2 容器和 Cloudflare R2 存储桶作为在 Unity Catalog 中注册的数据和 AI 资产的云存储位置。 R2 主要用于希望避免出现跨云和区域的增量共享等数据流出量费用的用例。 有关详细信息,请参阅使用 Cloudflare R2 副本或将存储迁移到 R2。
为了管理对保存了表的基础云存储的访问,Unity Catalog 使用以下对象类型:
存储凭据表示用于访问云租户上存储的数据的身份验证和授权机制,该机制对 Azure Data Lake Storage Gen2 容器使用 Azure 托管标识或服务主体,对 Cloudflare R2 存储桶则使用 R2 API 令牌。 每个存储凭据都服从 Unity Catalog 访问控制策略,该策略控制哪些用户和组可以访问该凭据。 如果用户无法访问 Unity Catalog 中的存储凭据,则请求将失败,Unity Catalog 不会代表用户向你的云租户进行身份验证。 仅应向需要定义外部位置的用户授予创建存储凭据的权限。 请参阅创建用于连接到 Azure Data Lake Storage Gen2 的存储凭据,以及创建用于连接到 Cloudflare R2 的存储凭据。
外部位置是将云存储路径与授权访问云存储路径的存储凭据相结合的对象。 每个存储位置都服从 Unity Catalog 访问控制策略,该策略控制哪些用户和组可以访问凭据。 如果用户无法访问 Unity Catalog 中的存储位置,则请求失败,Unity Catalog 不会代表用户向你的云租户进行身份验证。 仅应向需要创建外部表、外部卷或托管存储位置的用户授予创建和使用外部位置的权限。 请参阅创建外部位置以将云存储连接到 Azure Databricks。
外部位置既可用于外部数据资产(如外部表和外部卷),也可用于托管数据资产,例如托管表和托管卷。 有关差异的详细信息,请参阅什么是表和视图?什么是 Unity 目录卷?
当外部位置用于存储托管表和托管卷时,它被称为托管存储位置。 托管存储位置可以存在于元存储、目录或架构级别。 Databricks 建议在目录级别配置托管存储位置。 如果需要更精细的隔离,可以在架构级别指定托管存储位置。 默认情况下,为 Unity Catalog 启用的工作区没有元存储级别存储,但可以在元存储级别指定托管存储位置,以在未定义目录级存储时提供默认位置。 默认情况下,为 Unity Catalog 启用的工作区将以手动方式接收元存储级托管存储位置。 请参阅在 Unity Catalog 中指定托管存储位置和 Unity Catalog 最佳做法。
卷是大多数 Azure Databricks 用户应该用来与云对象存储中的非表格数据直接交互的安全对象。 请参阅什么是 Unity Catalog 卷?。
注意
虽然 Unity Catalog 支持使用云存储 URI 对外部表和外部卷进行基于路径的访问,但 Databricks 建议使用表名读取和写入所有 Unity Catalog 表,并使用 /Volumes
路径访问卷中的数据。
通过 Unity Catalog 实现云存储的最佳做法
Azure Databricks 需要使用 Azure Data Lake Storage Gen2 作为 Azure 存储服务,用于在 Azure Databricks 中使用 Unity Catalog 治理处理的数据。 通过 Azure Data Lake Storage Gen2,可以分离存储和计算成本,并利用 Unity Catalog 提供的精细访问控制。 如果数据存储在 OneLake(Microsoft Fabric Data Lake)中,并且由 Databricks 处理(绕过 Unity Catalog),则会产生捆绑存储和计算成本。 与用于存储、读取和写入数据的 Azure Data Lake Storage Gen2 相比,读取和写入成本大约高出 3 倍,写入成本大约高出 1.6 倍。 Azure Blob 存储也与 Unity Catalog 不兼容。
功能 | Azure Blob 存储 | Azure Data Lake Storage Gen2 | OneLake |
---|---|---|---|
在 Unity Catalog 中不受支持 | X | ✓ | X |
需要购买其他 Fabric 容量 | X | X | ✓ |
外部引擎支持的操作 | - 阅读 - 撰写 |
- 阅读 - 撰写 |
- 读取(与从 Azure Data Lake Storage Gen2 读取数据相比,读取的成本为其 3 倍)。 - 不支持写入。 有关详细信息,请参阅 OneLake 文档。 |
部署 | 区域 | Regional | 全局 |
身份验证 | Entra ID 共享访问签名 | Entra ID 共享访问签名 | Entra ID |
存储事件 | ✓ | ✓ | X |
软删除 | ✓ | ✓ | ✓ |
访问控制 | RBAC | RBAC、ABAC、ACL | RBAC(仅表/文件夹,不支持快捷方式 ACL) |
加密密钥 | ✓ | ✓ | X |
访问层级 | 联机存档 | 热、冷、寒、存档 | 仅热 |
后续步骤
如果你刚刚以管理员身份开始使用 Unity Catalog,请参阅设置和管理 Unity Catalog。
如果你是新用户,并且你的工作区已启用 Unity Catalog,请参阅教程:创建第一个表并授予权限。