創建視圖
這篇文章展示了如何在Unity Catalog中創建視圖。
視圖是一個隻讀對象,由一個或多個表和metastore中的視圖組成。它位於Unity Catalog的第三層三級名稱空間.可以從多個模式和目錄中的表和其他視圖創建視圖。
動態視圖除數據屏蔽外,還可用於提供行級和列級訪問控製。
視圖的所有者必須能夠讀取視圖中引用的表和視圖。視圖的讀取器不需要讀取視圖中引用的表和視圖,除非它們使用具有單用戶訪問模式的集群。
請注意
從群集的視圖中讀取單用戶訪問模式,你一定有選擇
在所有引用的表和視圖上。不支持動態視圖單用戶訪問模式。
創建視圖的語法示例:
創建視圖主要.默認的.experienced_employee(id評論“唯一識別號碼”,名字)評論“資深員工視野”作為選擇id,名字從all_employee在哪裏working_years>5;
需求
你必須有
使用目錄
的父目錄和使用模式
而且創建表格
父模式上的權限。metastore管理員或目錄所有者可以授予您所有這些特權。模式所有者可以授予您權限使用模式
而且創建表格
模式上的特權。您必須能夠讀取視圖(
選擇
對表或視圖,以及使用目錄
在目錄和使用模式
在模式上)。
如果一個視圖引用了工作空間-本地Hive metastore中的表,那麼隻能從包含工作空間-本地表的工作空間訪問該視圖。因此,Databricks建議隻從Unity Catalog亞存儲中的表或視圖創建視圖。
創建視圖
使用實例創建視圖。括號中的項目是可選的。替換占位符值:
< catalog_name >
:目錄的名稱。< schema_name >
:模式名。< view_name >
:視圖的名稱。<查詢>
:用於組成視圖的查詢、列、表和視圖。
創建視圖<catalog_name>.<schema_name>.<view_name>作為選擇<查詢>;
火花.sql("CREATE VIEW .. " AS " “選擇<查詢>”)
圖書館(SparkR)sql(粘貼("CREATE VIEW .. " AS " ,“選擇<查詢>”,9月=""))
火花.sql("CREATE VIEW .. " AS " +“選擇<查詢>”)
例如,創建一個名為sales_redacted
中的列sales_raw
表:
創建視圖sales_metastore.銷售.sales_redacted作為選擇user_id,電子郵件,國家,產品,總計從sales_metastore.銷售.sales_raw;
火花.sql(創建視圖sales_metastore.sales。sales_redacted AS "“選擇”User_id, "“電子郵件。”“國家,”“產品,”“總數”“從sales_metastore.sales.sales_raw”)
圖書館(SparkR)sql(粘貼(創建視圖sales_metastore.sales。sales_redacted AS ",“選擇”,User_id, ",“電子郵件。”,“國家,”,“產品,”,“總數”,“從sales_metastore.sales.sales_raw”,9月=""))
火花.sql(創建視圖sales_metastore.sales。sales_redacted AS "+“選擇”+User_id, "+“電子郵件。”+“國家,”+“產品,”+“總數”+“從sales_metastore.sales.sales_raw”)
屬性也可以創建視圖Databricks Terraform提供商而且databricks_table.可以通過使用檢索視圖全名的列表databricks_views.
創建動態視圖
在Unity Catalog中,你可以使用動態視圖來配置細粒度的訪問控製,包括:
列或行級別的安全性。
數據屏蔽。
請注意
使用動態視圖的細粒度訪問控製在集群上不可用單用戶訪問模式.
Unity Catalog引入了以下函數,允許您動態限製哪些用戶可以訪問視圖中的行、列或記錄:
current_user ()
:返回當前用戶的電子郵件地址。is_account_group_member ()
:返回真正的
如果當前用戶是特定帳戶級別組的成員。建議在動態視圖中針對Unity Catalog數據使用。is_member ()
:返回真正的
如果當前用戶是特定工作空間級別組的成員。提供此功能是為了兼容現有的Hive metastore。避免將它用於針對Unity Catalog數據的視圖,因為它不評估帳戶級別的組成員資格。
Databricks建議不要授予用戶讀取視圖中引用的表和視圖的能力。
下麵的例子演示了如何在Unity Catalog中創建動態視圖。
列級權限
使用動態視圖,可以限製特定用戶或組可以訪問的列。屬性的成員審計人員
組可以從sales_raw
表格在進行查詢分析時,Apache Spark會替換情況下
語句中任意一個字麵值字符串修訂
或電子郵件地址欄的實際內容。其他列正常返回。該策略對查詢性能沒有負麵影響。
—將字段“email”別名為自身(如“email”),以防止——權限邏輯不直接顯示在列名結果中。創建視圖sales_redacted作為選擇user_id,情況下當is_account_group_member(“審計師”)然後電子郵件其他的“修訂”結束作為電子郵件,國家,產品,總計從sales_raw
#將“email”字段別名為“email”,以防止錯誤#權限邏輯,避免直接顯示在列名結果中。火花.sql(創建視圖sales_redacted AS“選擇”User_id, "“情況何時”" is_account_group_member('審計員')THEN email "“其他‘已編輯’”“以電子郵件結尾。”“國家,”“產品,”“總數”“從sales_raw”)
圖書館(SparkR)#將“email”字段別名為“email”,以防止錯誤#權限邏輯,避免直接顯示在列名結果中。sql(粘貼(創建視圖sales_redacted AS,“選擇”,User_id, ",“情況何時”," is_account_group_member('審計員')THEN email ",“其他‘已編輯’”,“以電子郵件結尾。”,“國家,”,“產品,”,“總數”,“從sales_raw”,9月=""))
//將字段'email'別名為'email'以防止//不直接顯示在列名結果中的權限邏輯。火花.sql(創建視圖sales_redacted AS+“選擇”+User_id, "+“情況何時”+" is_account_group_member('審計員')THEN email "+“其他‘已編輯’”+“以電子郵件結尾。”+“國家,”+“產品,”+“總數”+“從sales_raw”)
行級權限
使用動態視圖,您可以將權限指定到行或字段級別。屬性的成員經理
當交易金額超過1,000,000美元時,組可以查看交易金額。匹配的結果將被過濾給其他用戶。
創建視圖sales_redacted作為選擇user_id,國家,產品,總計從sales_raw在哪裏情況下當is_account_group_member(“經理”)然後真正的其他的總計< =1000000結束;
火花.sql(創建視圖sales_redacted AS“選擇”User_id, "“國家,”“產品,”“總數”FROM sales_raw”,““案例”"當is_account_group_member('managers') THEN TRUE "" ELSE total <= 1000000 "“結束”)
圖書館(SparkR)sql(粘貼(創建視圖sales_redacted AS,“選擇”,User_id, ",“國家,”,“產品,”,“總數”,FROM sales_raw,”,“,“案例”,"當is_account_group_member('managers') THEN TRUE "," ELSE total <= 1000000 ",“結束”,9月=""))
火花.sql(創建視圖sales_redacted AS+“選擇”+User_id, "+“國家,”+“產品,”+“總數”+FROM sales_raw+”,“+“案例”+"當is_account_group_member('managers') THEN TRUE "+" ELSE total <= 1000000 "+“結束”)
數據屏蔽
因為Unity Catalog中的視圖使用Spark SQL,所以您可以通過使用更複雜的SQL表達式和正則表達式來實現高級數據屏蔽。下例中,所有用戶都可以分析電子郵件域,但隻能分析審計人員
群組可以查看用戶的全部電子郵件地址。
regexp_extract函數接受一個電子郵件地址,例如——user.x.lastname@example.com並摘錄“示例”,允許——分析人員查詢域名。創建視圖sales_redacted作為選擇user_id,地區,情況下當is_account_group_member(“審計師”)然後電子郵件其他的regexp_extract(電子郵件,'^.*@(.*)$',1)結束從sales_raw
regexp_extract函數接受一個電子郵件地址,例如# user.x.lastname@example.com並提取“示例”,允許# analysts命令查詢域名。火花.sql(創建視圖sales_redacted AS“選擇”User_id, "“地區,”“案件”"當is_account_group_member('審計員')THEN email "" ELSE regexp_extract(email, '^.*@(.*)$', 1) "“結束”FROM sales_raw)
圖書館(SparkR)regexp_extract函數接受一個電子郵件地址,例如# user.x.lastname@example.com並提取“示例”,允許# analysts命令查詢域名。sql(粘貼(創建視圖sales_redacted AS,“選擇”,User_id, ",“地區,”,“案件”,"當is_account_group_member('審計員')THEN email "," ELSE regexp_extract(email, '^.*@(.*)$', 1) ",“結束”,FROM sales_raw,9月=""))
// regexp_extract函數接受一個電子郵件地址,例如// user.x.lastname@example.com並提取'example',允許//分析員查詢域名。火花.sql(創建視圖sales_redacted AS+“選擇”+User_id, "+“地區,”+“案件”+"當is_account_group_member('審計員')THEN email "+" ELSE regexp_extract(email, '^.*@(.*)$', 1) "+“結束”+FROM sales_raw)