开始使用Unity目录
本文提供了为您的组织设置Unity Catalog的逐步指导。它描述了如何使你的Databricks帐户使用Unity目录,以及如何在Unity目录中创建你的第一个表。
Unity目录设置概述
本节提供了如何设置你的Databricks帐户来使用Unity Catalog和创建你的第一个表的高级概述。有关详细的步骤说明,请参阅后面的部分。
要启用您的Databricks帐户使用Unity Catalog,请执行以下操作:
配置一个S3桶和IAM角色,Unity Catalog可以用来存储和访问您的AWS帐户中的数据。
为您的组织运行的每个区域创建一个metastore。这个metastore作为Unity Catalog中所有数据的顶级容器。
作为metastore的创建者,您是它的所有者和metastore管理员。
将工作空间附加到metastore。每个工作空间将拥有与您在Unity Catalog中管理的数据相同的视图。
向Databricks帐户添加用户、组和服务主体。
对于现有的Databricks帐户,这些标识已经存在。
(可选)转移你的metastore管理角色到一个组。
要为您的用户设置数据访问,您可以执行以下操作:
在工作空间中,至少创建一个计算资源:集群或SQL仓库。
您将在运行查询和命令时使用此计算资源,包括在Unity Catalog中安全的数据对象上的grant语句。
至少创建一个目录。
目录包含模式(数据库),而模式(数据库)又包含用户使用的表。
至少创建一个模式。
创建表。
对于数据层次结构中的每一层(目录、模式、表),都向用户、组或服务主体授予特权。还可以使用授予行级或列级权限动态视图.
在AWS中配置存储桶和IAM角色
在此步骤中,您将创建Unity Catalog所需的AWS对象,以存储和访问AWS帐户中的数据。
找到您的Databricks帐户ID。
登录数据库账户控制台.
点击用户配置文件.
从弹出窗口复制帐户ID价值。
在AWS中,创建S3桶。
这个S3桶将是的根存储位置管理表在Unity目录。为每个metastore使用一个专用的S3桶,并将其定位于与您希望从中访问数据的工作区相同的区域。记录S3桶路径,以
s3: / /
.这个默认存储位置可以在编目和模式级别被重写。
重要的
桶名不能包含点符号(例如,
incorrect.bucket.name.notation
).有关更多桶命名指导,请参见AWS桶命名规则.如果开启了S3桶的KMS加密功能,请记录KMS加密密钥的名称。
创建IAM角色,允许访问S3桶。
建立一个跨帐户的信任关系,这样Unity Catalog就可以承担角色,代表Databricks用户访问桶中的数据。您的角色还必须配置为自我假设,即信任自己。将以下策略JSON粘贴到信任关系选项卡。
不修改第一个角色ARN
主要
部分。这是一个引用Databricks创建的角色的静态值。第二个角色ARN是对您正在创建的角色的自引用,因为角色必须是自假定的。有关自我假设角色的信息,请参见此亚马逊博客文章.取代
< YOUR_AWS_ACCOUNT_ID >
而且< THIS_ROLE_NAME >
使用实际的IAM角色值。在
sts: ExternalId
部分,取代< DATABRICKS_ACCOUNT_ID >
使用步骤1中找到的Databricks帐户ID(不是AWS帐户ID)。
{“版本”:“2012-10-17”,“声明”:[{“效应”:“允许”,“校长”:{“AWS”:[“攻击:aws:我::414351767826:角色/ unity-catalog-prod-UCMasterRole-14S5ZJVKOTYTL”,“攻击:aws:我::< YOUR_AWS_ACCOUNT_ID >:角色/ < THIS_ROLE_NAME >”]},“行动”:“sts: AssumeRole”,“条件”:{“StringEquals”:{“sts: ExternalId”:“< DATABRICKS_ACCOUNT_ID >”}}}]}
在AWS中,需要在与S3桶相同的AWS帐户中创建IAM策略。
为避免出现意外问题,您必须使用以下示例策略,替换以下值:
<桶>
:上一步创建的S3桶名称。< KMS_KEY >
:可选的。如果启用了加密,请提供加密S3桶内容的KMS密钥的名称。如果加密被禁用,则删除IAM策略的整个KMS部分。< AWS_ACCOUNT_ID >
:当前AWS帐户(不是您的Databricks帐户)的Account ID。< AWS_IAM_ROLE_NAME >
:上一步创建的AWS IAM角色名。
{“版本”:“2012-10-17”,“声明”:[{“行动”:[“s3: GetObject”,“s3: propertynames”,“s3: DeleteObject”,“s3: ListBucket”,“s3: GetBucketLocation”,“s3: GetLifecycleConfiguration”,“s3: PutLifecycleConfiguration”],“资源”:[“攻击:aws: s3::: <斗> / *”,“攻击:aws: s3::: <斗> "],“效应”:“允许”},{“行动”:[“公里:解密”,“公里:加密”,公里:GenerateDataKey *”],“资源”:[“攻击:aws:公里:< KMS_KEY >”],“效应”:“允许”},{“行动”:[“sts: AssumeRole”],“资源”:[“攻击:aws:我::< AWS_ACCOUNT_ID >:角色/ < AWS_IAM_ROLE_NAME >”],“效应”:“允许”}]}
请注意
如果您需要Unity Catalog的更严格的IAM策略,请联系您的Databricks代表寻求帮助。
砖使用
GetLifecycleConfiguration
而且PutLifecycleConfiguration
管理Partner Connect和上传数据UI所使用的个人登台位置的生命周期策略。
将IAM策略关联到IAM角色。
IAM角色的许可页签,将新建的IAM策略进行附加。
创建您的第一个metastore并附加一个工作区
要使用Unity Catalog,你必须创建一个metastore。metastore是Unity Catalog中数据的顶级容器。每个亚metastore公开一个三级名称空间(目录
.模式
.表格
)用以组织资料。
您可以为组织运行的每个区域创建一个metastore。您可以将每个区域亚存储连接到该区域中的任意数量的工作空间。
每个链接的工作空间都具有metastore中相同的数据视图,并且可以跨工作空间管理数据访问控制。
您可以使用三角洲分享.
产生亚转移瘤:
登录数据库账户控制台.
点击数据.
点击创建Metastore.
输入如下:
亚转移瘤的名称。
你想要部署亚转移瘤的区域。
这必须与要用于访问数据的工作区位于同一区域。确保它与前面创建的存储桶的区域相匹配。
S3桶路径(您可以省略
s3: / /
)和IAM角色名在AWS中配置存储桶和IAM角色.
点击创建.
当出现提示时,选择要链接到metastore的工作区。
有关将工作区分配给亚存储的更多信息,请参见为Unity Catalog启用一个工作区.
创建metastore的用户是它的所有者,也称为metastore管理员。metastore管理员可以在metastore中创建顶级对象,例如目录,并可以管理对表和其他对象的访问。Databricks建议将metastore管理角色重新分配给一个组。看到(推荐)转移你的metastore的所有权到一个组.
添加用户和组
一个Unity Catalog亚存储可以在多个Databricks工作区之间共享。Unity Catalog利用Databricks帐户级身份管理来提供跨所有工作空间的用户、服务主体和组的一致视图。在此步骤中,您将在帐户控制台中创建用户和组,然后选择这些身份可以访问的工作区。
请注意
如果您有一个现有的帐户和工作区,那么您的帐户中可能已经有现有的用户和组,因此您可以跳过此步骤。
如果您的帐户中有大量用户或组,或者您喜欢在Databricks之外管理身份,则可以这样做从您的身份提供者(IdP)同步用户和组.
使用实例在帐户控制台中添加用户和组。
登录账户控制台(要求用户是帐户admin)。
点击用户管理.
添加用户:
点击用户.
点击添加用户.
为用户输入名称和电子邮件地址。
点击发送邀请.
添加分组:
点击组.
点击添加组.
输入组的名称。
点击确认.
当出现提示时,将用户添加到组中。
将一个用户或组添加到工作区,在那里他们可以使用Unity Catalog管理的数据执行数据科学、数据工程和数据分析任务:
在侧栏中,单击工作区.
在权限选项卡上,单击添加权限.
搜索并选择用户或组,分配权限级别(工作区用户orgydF4y2Ba管理),并按保存.
首先,创建一个名为数据使用者.这个组将在本演练的后面使用。
创建一个集群或SQL仓库
在Unity Catalog中定义的表受到细粒度访问控制的保护。为了确保执行访问控制,Unity Catalog要求计算资源符合安全配置。默认情况下,Unity Catalog是安全的,这意味着不符合要求的计算资源不能访问Unity Catalog中的表。
Databricks提供两种计算资源:
你可以使用这些计算资源中的任何一个来与Unity Catalog一起工作,这取决于你正在使用的环境:用于Databricks的SQL仓库,用于数据科学与工程和Databricks机器学习环境的SQL或集群。
创建集群
创建一个可以访问Unity Catalog的集群:
以工作区管理员或用户身份登录到工作区创建集群权限.
点击计算.
点击创建计算.
输入集群名称。
设置访问模式来单用户.
只有单用户而且共享访问模式支持统一目录。看到什么是集群访问模式?.
集Databricks运行时版本来运行时:11.1 (Scala 2.12, Spark 3.2.1)或更高版本。
点击创建集群.
有关具体配置选项,请参见创建集群.
创建第一个表
在Unity Catalog中,metastore包含包含模式(数据库)的目录,你总是在模式中创建一个表。
你可以使用三级表示法来引用一个表:
<目录> . <模式> . <表格>
新创建的metastore包含一个名为主要
使用一个名为默认的
.在本例中,您将创建一个名为部门
在默认的
中的模式主要
目录。
要创建表,必须具有创建表格
的父模式的权限使用目录
父目录上的权限使用模式
父模式上的权限。默认情况下,Metastore管理员拥有这些权限。
的主要
目录和main.default
模式是唯一的,因为所有用户都以使用目录
特权主要
目录和使用模式
特权main.default
模式。如果您不是metastore管理员,则metastore管理员或模式所有者可以授予您权限创建表格
特权main.default
模式。
按照以下步骤手动创建表。您还可以导入一个例如笔记本电脑并运行它来创建目录、模式和表,并管理它们的权限。
创建一个笔记本并将其附加到中创建的集群创建一个集群或SQL仓库.
对于笔记本语言,选择SQL,Python,R,或Scala,这取决于你想使用的语言。
对象上创建表的权限
默认的
模式。要创建表,用户需要
创建表格
而且使用模式
模式上的权限使用目录
目录上的权限。所有用户都会收到使用目录
特权主要
目录和使用模式
特权main.default
创建metastore时的模式。Metastore的管理员和模式的所有者
main.default
可以使用下面的命令来格兰特
的创建表格
用户或组的特权:格兰特创建表格在模式<目录-的名字>.<模式-的名字>来' <EMAIL_ADDRESS>”;
火花.sql(“GRANT CREATE TABLE ON SCHEMA
.” )TO ' ' " 图书馆(SparkR)sql(“GRANT CREATE TABLE ON SCHEMA
.” )TO ' ' " 火花.sql(“GRANT CREATE TABLE ON SCHEMA
.” )TO ' ' " 例如,允许组的成员
数据使用者
中创建表main.default
:格兰特创建表格在模式主要.默认的来`数据-消费者`;
火花.sql(GRANT CREATE TABLE ON SCHEMA main.default为data-consumers)
图书馆(SparkR)sql("授权在SCHEMA main.default上创建表给'数据消费者' ")
火花.sql(GRANT CREATE TABLE ON SCHEMA main.default为data-consumers)
运行单元格。
创建一个名为
部门
.向笔记本添加一个新单元格。粘贴下列代码,其中指定表名及其列,并在其中插入5行。
创建表格主要.默认的.部门(deptcodeINT,deptname字符串,位置字符串);插入成主要.默认的.部门值(10,“金融”,“爱丁堡”),(20.,“软件”,帕丁顿的),(30.,“销售”,梅德斯通的),(40,“市场营销”,达灵顿的),(50,“管理”,“伯明翰”);
从pyspark.sql.types进口StructType,StructField,IntegerType,StringType模式=StructType([\StructField(“deptcode”,IntegerType(),真正的),StructField(“deptname”,StringType(),真正的),StructField(“位置”,StringType(),真正的)])火花.目录.不知道(的表=“main.default.department”,模式=模式\)dfInsert=火花.createDataFrame(数据=[(10,“金融”,“爱丁堡”),(20.,“软件”,“帕丁顿”),(30.,“销售”,“梅德斯通”),(40,“市场营销”,“达灵顿”),(50,“ADMIN”,“伯明翰”)],模式=模式)dfInsert.写.saveAsTable(的名字=“main.default.department”,模式=“添加”)
图书馆(SparkR)模式=structType(structField(“deptcode”,“整数”,真正的),structField(“deptname”,“字符串”,真正的),structField(“位置”,“字符串”,真正的))df=createDataFrame(数据=列表(),模式=模式)saveAsTable(df=df,的表=“main.default.department”)数据=列表(列表(“deptcode”=10 l,“deptname”=“金融”,“位置”=“爱丁堡”),列表(“deptcode”=20 l,“deptname”=“软件”,“位置”=“帕丁顿”),列表(“deptcode”=30升,“deptname”=“销售”,“位置”=“梅德斯通”),列表(“deptcode”=40 l,“deptname”=“市场营销”,“位置”=“达灵顿”),列表(“deptcode”=50 l,“deptname”=“ADMIN”,“位置”=“伯明翰”))dfInsert=createDataFrame(数据=数据,模式=模式)insertInto(x=dfInsert,的表=“main.default.department”)
进口火花.值得一提的._进口org.apache.火花.sql.类型.StructType瓦尔df=火花.createDataFrame(新java.跑龙套.ArrayList[行) (),新StructType().添加(“deptcode”,“int”).添加(“deptname”,“字符串”).添加(“位置”,“字符串”))df.写.格式(“δ”).saveAsTable(“main.default.department”)瓦尔dfInsert=Seq((10,“金融”,“爱丁堡”),(20.,“软件”,“帕丁顿”),(30.,“销售”,“梅德斯通”),(40,“市场营销”,“达灵顿”),(50,“ADMIN”,“伯明翰”)).toDF(“deptcode”,“deptname”,“位置”)dfInsert.写.insertInto(“main.default.department”)
运行单元格。
查询表格。
向笔记本添加一个新单元格。粘贴以下代码,然后运行单元格。
选择*从主要.默认的.部门;
显示(火花.表格(“main.default.department”))
显示(tableToDF(“main.default.department”))
显示(火花.表格(“main.default.department”))
类授予读取和查询表的能力
数据使用者
组中创建的添加用户和组.添加一个新的单元格到笔记本,并粘贴以下代码:
格兰特选择在主要.默认的.部门来`数据-消费者`;
火花.sql(“GRANT SELECT ON main.default.department TO ' data-consumers '”)
sql(“GRANT SELECT ON main.default.department TO ' data-consumers '”)
火花.sql(“GRANT SELECT ON main.default.department TO ' data-consumers '”)
请注意
向所有帐户级用户授予读访问权限,而不是仅授予读访问权限
数据使用者
,使用组名账户用户
代替。运行单元格。
(可选)将metastore链接到其他工作空间
Unity Catalog的一个关键优点是能够在位于同一区域的多个工作区之间共享单个亚矿。您可以针对相同的数据运行不同类型的工作负载,而无需在工作区之间移动或复制数据。每个工作空间只能有一个Unity Catalog亚矿分配给它。
要了解如何将metastore链接到其他工作区,请参见为Unity Catalog启用一个工作区.
(推荐)从IdP同步帐户级别的身份
您可以通过从第三方身份提供者(IdP)(如Okta)设置供应来管理用户对Databricks的访问。有关完整说明,请参见从您的标识提供程序同步用户和组.
(可选)安装Unity Catalog命令行
Unity Catalog CLI是砖CLI.要使用Unity Catalog命令行,请执行以下操作:
可选地,创建一个或多个连接配置文件在CLI下使用。
学习如何使用Databricks命令行一般来说。
开始使用Unity Catalog命令行.
下一个步骤
BOB低频彩了解更多关于Unity目录:什么是Unity Catalog?