开始使用 Unity Catalog
重要
Unity Catalog 目前为公共预览版。 要使用该预览版,请联系 Azure Databricks 代表。
本指南帮助你开始使用 Unity Catalog(Azure Databricks 数据治理框架)。
要求
你必须是 Azure Databricks 帐户管理员。
首个 Azure Databricks 帐户管理员必须是 Azure Active Directory 全局管理员或根管理组(通常称为租户根组)成员。 该用户可以将具有任何级别的 Azure 租户权限的用户分配为后续的 Azure Databricks 帐户管理员(他们自己可以分配更多帐户管理员)。
Azure Databricks 帐户必须使用高级计划。
在 Azure 租户中,必须有权创建:
- 与 Azure Data Lake Storage Gen2 配合使用的存储帐户。 请参阅创建用于 Azure Data Lake Storage Gen2 的存储帐户。
- 用于保存系统分配的托管标识的新资源。 这要求你是租户中任何订阅中的资源组的参与者或所有者。
为元存储配置并授予对 Azure 存储的访问权限
在此步骤中,你将为将由 Unity Catalog 元存储管理的元数据和表创建存储帐户和容器,创建生成系统分配的托管标识的 Azure 连接器,并授予该托管标识对存储容器的访问权限。
为 Azure Data Lake Storage Gen2 创建存储帐户。
此存储帐户将包含与 Unity Catalog 元存储及其对象相关的元数据,以及 Unity Catalog 中托管表的数据。 请参阅创建用于 Azure Data Lake Storage Gen2 的存储帐户。 记下创建存储帐户的区域。
创建一个存储容器,用于保存 Unity Catalog 元存储的元数据和托管表。
每个区域最多只能创建一个元存储。 建议对元存储和存储容器使用相同的区域。
记下容器的 ADLSv2 URI,其格式如下:
abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/<metastore-name>在随后的步骤中,将
<storage-container>替换为此 URI。在 Azure 中,创建一个 Azure Databricks 访问连接器,该连接器包含一个托管标识并授予它对存储容器的访问权限。
创建首个元存储并附加工作区
元存储是 Unity Catalog 中数据的顶级容器。 每个元存储公开一个 3 级命名空间 (catalog.schema.table),可在该命名空间组织数据。
可以在一个帐户中的多个 Azure Databricks 工作区之间共享单个元存储。 每个链接的工作区对元存储中的数据具有相同的视图,并且可以跨工作区管理数据访问控制。 Databricks 允许每个区域有一个元存储。 如果你有一个多区域 Databricks 部署,可能需要为每个区域使用单独的元存储,但最好使用少量元存储,除非组织需要在数据集之间设置硬隔离边界。 无法跨元存储轻松联接或查询数据。
创建元存储:
确保你拥有存储容器的路径以及你在上一个任务中创建的 Azure Databricks 访问连接器的资源 ID。
登录到 Azure Databricks 帐户控制台。
单击
“数据”。单击“创建元存储”。
输入以下字段的值
元存储的名称。
将在其中部署元存储的区域。
为了获得最佳性能,请将访问连接器、工作区、元存储和云存储位置放在同一云区域中。
ADLS Gen 2 路径:输入你将用作元存储根存储的存储容器的路径。
前缀
abfss://会自动添加。访问连接器 ID:按以下格式输入 Azure Databricks 访问连接器的资源 ID:
/subscriptions/12f34567-8ace-9c10-111c-aea8eba12345c/resourceGroups/<resource_group>/providers/Microsoft.Databricks/accessConnectors/<connector-name>
单击“创建”。
如果请求失败,请使用其他元存储名称重试。
出现提示时,选择工作区以链接到元存储。
创建元存储的帐户级用户是其所有者和元存储管理员。任何帐户管理员都可以管理元存储及其对象的权限。 若要将元存储的所有权转让给其他帐户级用户或组,请参阅(推荐)将元存储的所有权转让给组。
添加用户和组
Unity Catalog 元存储可以在多个 Databricks 工作区之间共享。 为了使 Databricks 在所有工作区中具有一致的用户和组视图,现在可以将 Azure Active Directory 用户和组添加为帐户级标识。 请按照以下步骤添加帐户级标识。
注意
必须将用户和组添加为帐户级标识,然后才能访问 Unity Catalog。
初始帐户级管理员必须是 Azure Active Directory 根管理组(默认情况下名为“租户根组”)中的参与者。 Azure Active Directory 全局管理员可以将自己添加到此组。 为自己授予此角色,或让 Azure Active Directory 全局管理员授予你此角色。
初始帐户级管理员可以将用户或组添加到帐户控制台,并可以通过向用户授予“管理员”角色来指定其他帐户级管理员。
已添加到 Azure 租户中的工作区的所有 Azure Active Directory 用户都将自动添加为帐户级标识。
要指定其他帐户级管理员,请授予用户“管理员”角色。
注意
无法向组授予“管理员”角色。
- 登录到帐户控制台,方法是单击
“设置”,然后单击“管理帐户”。 - 单击
“用户和组”。 此时将显示 Azure Active Directory 用户的列表。 仅显示已添加到工作区的用户和组。 - 单击用户的名称。
- 单击“角色”。
- 启用“管理员”。
- 登录到帐户控制台,方法是单击
若要开始,请创建一个名为“data-consumers”的组。 此演练稍后将使用此组。
创建计算资源
Unity Catalog 中定义的表受精细访问控制的保护。 为了确保强制执行访问控制,Unity Catalog 要求群集符合安全配置。 默认情况下,Unity Catalog 是安全的,这意味着不符合的群集无法访问 Unity Catalog 中的表。
创建可以访问 Unity Catalog 中的数据的计算资源:
创建群集
创建可以访问 Unity Catalog 的数据科学与工程群集:
以工作区级管理员身份登录到工作区。
单击
“计算”。单击“创建群集”。
- 输入群集的名称。
- 将“Databricks 运行时版本”设置为“Runtime: 10.3 (Scala 2.12、Spark 3.2.1)”或更高版本。
单击“高级选项”。 将“安全模式”设置为“用户隔离”或“单一用户”。
用户隔离群集可由多个用户共享,但仅支持 SQL 工作负荷。 还禁用了一些高级群集功能(如库安装、init 脚本和 DBFS 熔断器装载),以确保群集用户之间的安全隔离。
要使用这些高级群集特性或语言,或者使用 Python、Scala 和 R 运行工作负载,请将群集模式设置为“单一用户”。 单一用户群集还可以运行 SQL 工作负载。 群集可以由单个用户(默认情况下为群集的所有者)专用使用;其他用户无法连接到群集。 自动作业应在此模式下运行,并且作业的所有者应为群集的所有者。 在此模式下,无法强制执行查看安全。 从视图中选择的用户将使用自己的权限执行。
有关每种安全模式中可用功能的详细信息,请参阅群集安全模式。
单击“创建群集”。
创建 SQL 仓库
创建可以访问 Unity Catalog 数据的 SQL 仓库:
- 以工作区级管理员身份登录到工作区。
- 从 persona 切换器中,选择 SQL。
- 单击“创建”,然后选择“SQL 仓库”。
- 在“高级设置”下,将“频道”设置为“预览”。
将自动创建具有正确安全模式的 SQL 仓库,无需进行任何配置。
创建你的第一个机器人
在 Unity Catalog 中,元存储涵盖包含架构(数据库)的目录,并且你始终在架构中创建表。 可以使用三级表示法来引用表:
<catalog>.<schema>.<table>
新创建的元存储包含名为 main 的目录,其中包含名为 default 的空架构。 在本例中,你将在 main 目录的 default 架构中创建一个名为 department 的表。
若要创建表,必须为帐户管理员、元存储管理员或对父架构具有 CREATE 权限且对父目录和架构具有 USAGE 权限的用户。
按照以下步骤手动创建表。 还可以导入示例笔记本并运行它来创建目录、架构和表,并管理对每项的权限。
-
对于笔记本语言,请选择“SQL”。
授予在
default架构上创建表的权限。若要创建表,除了对目录的
USAGE权限外,用户还需要对架构的CREATE和USAGE权限。 创建元存储时,所有用户都会获得对main目录和main.default架构的USAGE权限。帐户管理员、元存储管理员及
main.default架构的所有者可以使用以下命令GRANT用户或组CREATE权限:GRANT CREATE ON SCHEMA <catalog-name>.<schema-name> TO `<EMAIL_ADDRESS>`;例如,允许
data-consumers组的成员在main.default中创建表:GRANT CREATE ON SCHEMA main.default to `data-consumers`;运行单元。
创建一个名为
department的新表。向笔记本添加一个新单元。 粘贴以下 SQL,该 SQL 指定表名、其列,并在其中插入五行。
CREATE TABLE main.default.department ( deptcode INT, deptname STRING, location STRING ); INSERT INTO main.default.department VALUES (10, 'FINANCE', 'EDINBURGH'), (20, 'SOFTWARE', 'PADDINGTON'), (30, 'SALES', 'MAIDSTONE'), (40, 'MARKETING', 'DARLINGTON'), (50, 'ADMIN', 'BIRMINGHAM');运行单元。
查询表。
向笔记本添加一个新单元。 粘贴以下 SQL,然后运行该单元。
SELECT * from main.default.department;向
data-consumers组授予读取和查询表的能力,该组是在添加用户和组时创建的。向笔记本添加一个新单元,并粘贴以下 SQL:
GRANT SELECT ON main.default.department TO `data-consumers`;注意
若要向所有帐户级用户(而不只是
data-consumers)授予读取访问权限,请改为使用组名称account users。运行单元。
(可选)将元存储链接到其他工作区。
Unity Catalog 的一个主要优势是能够在多个工作区之间共享单个元存储。 然后,可以针对相同的数据运行不同类型的工作负载,而无需在工作区之间移动或复制数据。 每个工作区最多可以有一个分配的 Unity Catalog 元存储。 将元存储链接到其他工作区:
- 登录到帐户控制台。
- 单击
“数据”。 - 单击元存储的名称以打开其属性。
- 单击“工作区”选项卡。
- 单击“分配到工作区”。
- 选择一个或多个工作区。 可以键入工作区名称的一部分来筛选列表。
- 单击“分配”。 分配完成后,工作区将显示在元存储的“工作区”选项卡中。
每个所选工作区中的用户现在都可以访问元存储中的数据。
(可选)取消元存储与工作区的链接。
Unity Catalog 的一个主要优势是能够在多个工作区之间共享单个元存储。 若要删除工作区对元存储中数据的访问权限,可以取消元存储与工作区的链接。
- 登录到帐户控制台。
- 单击
“数据”。 - 单击元存储的名称以打开其属性。
- 单击“工作区”选项卡。
- 取消选择一个或多个工作区。 可以键入工作区名称的一部分来筛选列表。
- 单击“分配”。 分配完成后,工作区不再显示在元存储的“工作区”选项卡中。
每个所选工作区中的用户现在都无法再访问元存储中的数据。
示例笔记本
可以使用以下示例笔记本创建目录、架构和表,并管理对每项的权限。
创建和管理 Unity Catalog 表
(推荐)将元存储的所有权转让给组
如果可能,Databricks 建议组所有权而不是单用户所有权。 创建元存储的用户是其初始所有者。 元存储所有者可以管理元存储中所有安全对象的特权,以及创建目录、外部位置和存储凭据。
- 登录到帐户控制台。
- 单击
“数据”。 - 单击元存储的名称以打开其属性。
- 在“所有者”下,单击“编辑”。
- 从下拉列表中选择一个组。 可以在字段中输入文本以搜索选项。
- 单击“ 保存”。
(可选)安装 Unity Catalog CLI
Unity Catalog CLI 是 Databricks CLI 的一部分。 若要使用 Unity Catalog CLI,请执行以下操作:
- 设置 CLI。
- 设置身份验证。
- (可选)创建一个或多个连接配置文件以与 CLI 配合使用。
- 了解通常情况下如何使用 Databricks CLI。
- 开始使用 Unity Catalog CLI。
后续步骤
- 详细了解 Unity Catalog 的关键概念
- 创建表
- 创建视图