设置和管理 Unity Catalog
本文介绍如何配置和使用 Unity Catalog 来管理 Azure Databricks 工作区中的数据。 它主要适用于首次使用 Unity Catalog 的工作区管理员。
本文结束时,你将拥有:
- 为 Unity Catalog 启用的工作区。
- 有权访问 Unity Catalog 的计算。
- 有权在 Unity Catalog 中访问和创建对象的用户。
你可能还想要查看其他介绍性文章:
- 有关如何在 Unity Catalog 中创建表和授予权限的快速演练,请参阅教程:创建第一个表并授予权限。
- 有关 Unity Catalog 的关键概念和 Unity Catalog 工作原理的简介,请参阅《什么是 Unity Catalog?》。
- 要了解如何以最佳方式使用 Unity Catalog 来满足数据治理需求,请参阅《Unity Catalog 最佳做法》。
注意
如果要将现有的非 Unity 目录工作区升级到 Unity 目录,可以从使用UCX(Databricks Labs 项目)中受益,该项目提供一组工作流和实用工具,用于将标识、权限和表升级到 Unity 目录。 请参阅使用 UCX 实用工具将工作区升级到 Unity Catalog。
Unity Catalog 启用概述
要使用 Unity Catalog,必须为 Unity Catalog 启用 Azure Databricks 工作区,这意味着要将工作区附加到 Unity Catalog 元存储(Unity Catalog 元数据的顶级容器)。
管理员设置 Unity Catalog 的方式取决于工作区是自动为 Unity Catalog 启用还是需要手动启用。
自动启用 Unity Catalog
Databricks 于 2023 年 11 月 9 日自动为 Unity Catalog 启用了新工作区,并逐步跨帐户推出。 自动启用的工作区具有以下属性:
自动预配的 Unity 目录元存储(除非工作区区域已存在 Unity 目录元存储,并且为自动工作区分配启用元存储)。
工作区管理员的默认特权,例如能够创建目录或外部数据库连接。
没有元存储管理员(除非使用了现有的 Unity Catalog 元存储,并且已分配元存储管理员)。
没有托管表和托管卷的元存储级别存储(除非使用了具有元存储级别存储的现有 Unity Catalog 元存储)。
工作区目录在最初预配时以工作区命名。
工作区中的所有用户可以在此目录中的
default
架构中创建资产。 默认情况下,此目录会绑定到你的工作区,这意味着只能通过工作区访问它。 在创建工作区时自动预配工作区目录的功能正在逐步向帐户推出。
这些默认配置适用于大多数工作区,但全部可以由工作区管理员或帐户管理员进行修改。例如,帐户管理员可以分配元存储管理员并创建元存储级别存储,工作区管理员则可以修改工作区目录名称和访问权限。
如果未自动为 Unity Catalog 启用工作区,该怎么办?
如果没有自动为 Unity Catalog 启用工作区,帐户管理员或元存储管理员必须手动将工作区附加到同一区域中的 Unity Catalog 元存储。 如果区域中不存在 Unity Catalog 元存储,则帐户管理员必须创建一个。 如需说明,请参阅 创建 Unity Catalog 元存储。
如何知道我的工作区是否已启用 Unity Catalog?
若要确认你的工作区是否启用了 Unity Catalog,请让 Azure Databricks 工作区管理员或帐户管理员为你检查。 另请参阅步骤 1:确认你的工作区已启用 Unity Catalog。
如何实现知道我的工作区是否包含工作区目录?
某些新的工作区具有工作区目录,它们在最初预配时以你的工作区命名。 若要确定你的工作区是否具有目录,请单击边栏中的 “目录”以打开目录资源管理器,然后搜索使用你的工作区名称作为目录名称的目录。
注意
工作区目录与 Unity Catalog 中的任何其他目录类似:工作区管理员可以更改其名称、更改其所有权,甚至将其删除。 但是,在创建工作区后,它会立即使用工作区名称
开始之前
在开始本文所述的任务之前,应熟悉基本的 Unity Catalog 概念,包括元存储、管理员角色和托管存储。 请参阅什么是 Unity Catalog?。
还应确认已满足以下要求:
高级计划上的 Azure Databricks 工作区。
以下角色和特权(这取决于工作区的状态):
工作区管理员:如果在创建工作区时已自动为工作区启用了 Unity Catalog,则只有工作区管理员才能完成所需的任务。
帐户管理员:如果工作区尚未启用 Unity Catalog,则帐户管理员必须将工作区附加到元存储。
如果工作区所在区域中不存在 Unity Catalog 元存储,则帐户管理员还必须创建 Unity Catalog 元存储。
有关确定工作区所在区域是否存在元存储的说明以及如何创建元存储的说明,请参阅本文。
步骤 1:确认已为 Unity Catalog 启用工作区
在此步骤中,你将确定工作区是否已启用 Unity Catalog,启用定义为将 Unity Catalog 元存储附加到工作区。 如果工作区未启用 Unity Catalog,则你必须手动为工作区启用 Unity Catalog。 请参阅工作区未启用 Unity Catalog 时的后续步骤。
若要确认,请执行以下操作之一。
使用帐户控制台确认 Unity Catalog 启用情况
- 以 Azure Databricks 帐户管理员身份登录到帐户控制台。
- 单击 “工作区”。
- 找到你的工作区并检查元存储列。 如果存在元存储名称,则你的工作区已附加到 Unity Catalog 元存储,因此已启用 Unity Catalog。
运行 SQL 查询以确认 Unity Catalog 启用情况
在 SQL 查询编辑器或附加到使用 共享 或 单个用户访问 模式的群集的笔记本中运行以下 SQL 查询。 请参阅访问模式。 不需要管理员角色。
SELECT CURRENT_METASTORE();
如果查询返回了如下所示的元存储 ID,则你的工作区已附加到 Unity Catalog 元存储,因此启用了 Unity Catalog。
工作区未启用 Unity Catalog 时的后续步骤
如果你的工作区没有启用 Unity Catalog(附加到元存储),则下一步取决于你是否已为你的工作区区域定义了一个 Unity Catalog 元存储:
- 如果帐户已为工作区区域定义了 Unity Catalog 元存储,则只需将工作区附加到现有元存储。 转到为工作区启用 Unity Catalog。
- 如果没有为工作区的区域定义的 Unity Catalog 元存储,则必须创建元存储,然后附加工作区。 转到创建 Unity Catalog 元存储。
当你的工作区启用了 Unity Catalog 后,请转到下一步。
步骤 2:添加用户并分配工作区管理员角色
创建工作区的用户将自动添加为具有工作区管理员角色的工作区用户(即 admins
工作区本地组中的用户)。 作为工作区管理员,你可以向工作区添加用户和邀请用户加入工作区,可以向其他用户分配工作区管理员角色,并且可以创建服务主体和组。
帐户管理员还可以将用户、服务主体和组添加到工作区。 可以授予帐户管理员和元存储管理员角色。
有关详细信息,请参阅《管理用户》。
(推荐)从 Microsoft Entra ID 同步帐户级标识
通过从 Microsoft Entra ID 设置预配,可以方便地管理用户对 Azure Databricks 的访问权限。 有关完整说明,请参阅从 Microsoft Entra ID 同步用户和组。
步骤 3:创建用户可用于运行查询和创建对象的群集或 SQL 仓库
要运行 Unity Catalog 工作负载,计算资源必须符合某些安全要求。 不符合的计算资源将无法访问 Unity Catalog 中的数据或其他对象。 SQL 仓库将始终符合 Unity Catalog 要求,但某些群集访问模式则不是这样。 请参阅访问模式。
作为工作区管理员,可以选择将计算创建限制为管理员,或允许用户创建自己的 SQL 仓库和群集。 还可以创建群集策略,以支持用户使用强制实施的符合 Unity Catalog 的规范创建自己的群集。 请参阅计算访问权限和创建和管理计算策略。
步骤 4:向用户授予权限
要在 Unity Catalog 目录和架构中创建对象并对其进行访问,用户必须具有执行此操作的权限。 本部分介绍默认授予某些工作区的用户和管理员特权,并介绍如何授予其他特权。
默认用户特权
某些工作区在启动时具有默认的用户(非管理员)特权:
如果你的工作区在启动时具有自动预配的工作区目录,则所有工作区用户都可以在工作区目录的
default
架构中创建对象。若要了解如何确定工作区是否具有工作区目录,请参阅如何实现知道我的工作区是否包含工作区目录?
如果你的工作区已手动启用 Unity Catalog,则它会自动预配
main
目录。工作区用户拥有对
main
目录的USE CATALOG
特权,该特权不授予在目录中创建或选择任何对象的能力,但却是使用目录中任何对象的先决条件。 默认情况下,创建元存储的用户会拥有main
目录,并且可以向其他用户转让所有权和授予访问权限。如果在创建元存储后添加元存储,则不会预配任何
main
目录。
其他工作区默认不创建目录,默认不启用非管理员用户特权。 工作区管理员必须创建第一个目录,并向用户授予对它及其中的对象的访问权限。 在完成本部分中的步骤之前,跳到步骤 5:创建新的目录和架构。
默认管理员特权
某些工作区在启动时具有默认工作区管理员特权:
- 如果已自动为 Unity Catalog 启用了工作区,则:
- 工作区管理员可以在新目录中创建新的目录和对象,并向其授予访问权限。
- 默认情况下没有元存储管理员。
- 工作区管理员拥有工作区目录(如果有),并可以授予对该目录和该目录中任何对象的访问权限。
- 如果已手动为 Unity Catalog 启用工作区,则:
- 默认情况下,工作区管理员没有特殊的 Unity Catalog 特权。
- 元存储管理员必须存在并可以创建任何 Unity Catalog 对象,还可以获取任何 Unity Catalog 对象的所有权。
有关在自动启用的 Unity Catalog 工作区中向工作区管理员授予的其他对象权限的列表,请参阅《自动为 Unity Catalog 启用工作区后的工作区管理员权限》。
授予特权
若要访问上一部分中列出的那些之外的对象,特权用户必须授予该访问权限。
例如,要授予组在 my-catalog
中创建新架构的权限,目录所有者可以在 SQL 编辑器或笔记本中运行以下命令:
GRANT CREATE SCHEMA ON my-catalog TO `data-consumers`;
如果自动为 Unity Catalog 启用了工作区,则工作区管理员将拥有工作区目录,并可以授予创建新架构的权限:
GRANT CREATE SCHEMA ON <workspace-catalog> TO `data-consumers`;
还可以使用目录资源管理器授予和撤销权限。
重要
不能向工作区本地 users
或 admins
组授予权限。 要向组授予权限,它们必须是帐户级组。
有关在 Unity Catalog 中管理权限的详细信息,请参阅《管理 Unity Catalog 中的权限》。
步骤 5:创建新的目录和架构
若要开始使用 Unity Catalog,必须至少定义一个目录。 目录是 Unity Catalog 中数据隔离和组织的主要单位。 所有架构和表都位于目录中,卷、视图和模型也一样。
某些工作区没有自动预配的目录。 若要使用 Unity Catalog ,工作区管理员必须为此类工作区创建第一个目录。
其他工作区有权访问预先预配的目录,你的用户可以访问该目录以开始使用(工作区目录或 main
目录,具体取决于为工作区启用 Unity Catalog 的方式)。 在 Azure Databricks 中添加更多数据和 AI 资产时,可以创建其他目录来对这些资产进行分组,以便于对数据进行逻辑管理。
有关如何最好地使用目录和架构来组织数据和 AI 资产的建议,请参阅《Unity Catalog 最佳做法》。
作为元存储管理员、工作区管理员(仅限自动启用的工作区)或其他具有 CREATE CATALOG
特权的用户,可以在元存储中创建新目录。 执行此操作时,应:
为新目录创建托管存储。
托管存储是 Azure 帐户中托管表和托管卷的专用存储位置。 可以将托管存储分配给元存储、目录和架构。 当用户创建表时,数据存储在层次结构中最低的存储位置。 例如,如果为元存储和目录(但没有为架构)定义存储位置,则数据会存储在为目录定义的位置中。
Databricks 建议在目录级别分配托管存储,因为目录通常表示数据隔离的逻辑单元。 如果熟悉共享同一存储位置的多个目录中的数据,则可以默认使用元存储级存储位置。 如果已自动为 Unity Catalog 启用了工作区,则默认情况下不存在元存储级存储。 帐户管理员可以选择配置元存储级存储。 请参阅在 Unity Catalog 中指定托管存储位置和将托管存储添加到现有元存储。
将托管存储分配给目录需要你创建:
- 存储凭据。
- 引用该存储凭据的外部位置。
有关这些对象的简介和创建它们的说明,请参阅使用 Unity Catalog 连接到云对象存储。
如果要限制共享同一元存储的其他工作区的访问,请将新目录绑定到工作区。
请参阅仅限特定工作区能访问目录。
授予对目录的权限。
有关详细说明,请参阅创建目录。
目录创建示例
以下示例演示如何创建包含托管存储的目录,然后演示如何授予对目录的 SELECT
权限:
CREATE CATALOG IF NOT EXISTS mycatalog
MANAGED LOCATION 'abfss://mycontainer@<myaccount.dfs.core.windows.net//depts/finance';
GRANT SELECT ON mycatalog TO `finance-team`;
有关更多示例(包括有关使用目录资源管理器创建目录的说明),请参阅创建目录。
创建架构
架构表示比目录更精细的分组(例如部门或项目)。 目录中的所有表和其他 Unity Catalog 对象包含在架构中。 作为新目录的所有者,可能需要在目录中创建架构。 但你可能希望改为通过授予其他用户对目录的 CREATE SCHEMA
权限来向其委托创建架构的能力。
有关详细说明,请参阅创建架构。
(可选)分配元存储管理员角色
如果已自动为 Unity Catalog 启用工作区,则默认情况下不会分配元存储管理员角色。 元存储管理员具有工作区管理员所不具有的一些权限。
如果需要执行以下操作,则可能需要分配元存储管理员:
在某人离开公司后,更改目录的所有权。
管理和委托对 init 脚本和 jar 允许列表的权限。
向非工作区管理员委托创建目录的权限和其他顶级权限。
通过增量共享接收共享数据。
使用 Clean Rooms。
移除默认工作区管理员权限。
如果元存储没有托管存储,则为其添加。 请参阅将托管存储添加到现有元存储。
有关元存储管理员角色及分配该角色的说明的详细信息,请参阅《分配元存储管理员》。
将 Hive 元存储中的表升级到 Unity Catalog 表
如果你的工作区在启用 Unity Catalog 之前处于服务中状态,则它可能有一个 Hive 元存储,其中包含你要继续使用的数据。 Databricks 建议将 Hive 元存储管理的表迁移到 Unity Catalog 元存储。
请参阅将 Hive 表和视图升级到 Unity Catalog 和使用 UCX 实用工具将工作区升级到 Unity Catalog。
(可选)继续使用 Hive 元存储
如果工作区具有包含要继续使用的数据的 Hive 元存储,并且你选择不遵循将 Hive 元存储管理的表升级到 Unity Catalog 元存储的建议,则可以继续处理 Hive 元存储中的数据以及 Unity Catalog 元存储中的数据。
Hive 元存储在 Unity Catalog 界面中表示为名为 hive_metastore
的目录。 为了继续处理 Hive 元存储中的数据,而不必更新查询以指定 hive_metastore
目录,可以将工作区的默认目录设置为 hive_metastore
。 请参阅《管理默认目录》。
根据为 Unity Catalog 启用工作区的时间,默认目录可能已经为 hive_metastore
。
(可选)创建元存储级存储
尽管 Databricks 建议为元存储中的每个目录创建单独的托管存储位置(也可以对架构执行相同的操作),但你可以选择改为在元存储级别创建托管位置,并将其用作多个目录和架构的存储。
如果需要元存储级别存储,则还必须分配元存储管理员。请参阅(可选)分配元存储管理员角色。
仅当满足以下条件时,才需要元存储级别存储:
- 你想要使用 Databricks 到 Databricks Delta Sharing 共享笔记本。
- 你使用依赖于个人暂存位置(已弃用)的 Databricks 合作伙伴产品集成。
有关托管存储位置的层次结构的详细信息,请参阅数据在存储中以物理方式分隔。
若要了解如何将元存储级别存储添加到没有该存储的元存储,请参阅将托管存储添加到现有元存储。
注意
2023 年 11 月 9 日之前启用了 Unity Catalog 的大多数工作区都有元存储级别存储根。
后续步骤
- 运行快速教程,以在 Unity Catalog 中创建第一个表:教程:创建第一个表并授予权限
- 了解有关 Unity Catalog 的更多信息:什么是 Unity Catalog?
- 了解使用 Unity Catalog 的最佳做法:《Unity Catalog 最佳做法》
- 了解如何授予和撤销权限:《在 Unity Catalog 中管理特权》
- 了解如何创建表
- 了解如何将 Hive 表升级到 Unity Catalog
- 安装 Databricks CLI:什么是 Databricks CLI?