創建視圖

這篇文章展示了如何在Unity Catalog中創建視圖。

視圖是一個隻讀對象,由一個或多個表和metastore中的視圖組成。它位於Unity Catalog的第三層三級名稱空間.可以從多個模式和目錄中的表和其他視圖創建視圖。

動態視圖除數據屏蔽外,還可用於提供行級和列級訪問控製。

視圖的所有者必須能夠讀取視圖中引用的表和視圖。視圖的讀取器不需要讀取視圖中引用的表和視圖,除非它們使用具有單用戶訪問模式的集群。

請注意

從群集的視圖中讀取單用戶訪問模式,你一定有選擇在所有引用的表和視圖上。不支持動態視圖單用戶訪問模式。

創建視圖的語法示例:

創建視圖主要默認的experienced_employeeid評論“唯一識別號碼”名字評論“資深員工視野”作為選擇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 "“選擇<查詢>”
圖書館SparkRsql粘貼"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”
圖書館SparkRsql粘貼創建視圖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 "“結束”
圖書館SparkRsql粘貼創建視圖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
圖書館SparkRregexp_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_raw9月""))
// 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

刪除視圖

必須是視圖的所有者才能刪除視圖。使用實例刪除視圖。

下降視圖如果存在catalog_nameschema_nameview_name