開始使用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是數據庫命令行設置和文檔.要使用Unity Catalog命令行,請執行以下操作:
可選地,創建一個或多個連接配置文件在CLI下使用。
學習如何使用Databricks命令行一般來說。
開始使用Unity Catalog命令行.
下一個步驟
了解更多關於Unity目錄:什麼是Unity Catalog?