創建視圖

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

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

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

創建視圖的語法示例:

創建視圖主要默認的experienced_employeeid評論“唯一的身份證號碼”的名字評論“經驗豐富的員工查看”作為選擇id的名字all_employee在哪裏working_years>5

需求

  • 你必須有使用控件的父目錄和使用而且創建對父架構的權限。metastore管理員或目錄所有者可以授予您所有這些特權。架構所有者可以授予您使用而且創建模式上的特權。

  • 您必須能夠讀取視圖中引用的表和視圖。(選擇在桌子上或視圖上,以及使用目錄和模式)。

    請注意

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

如果一個視圖引用了工作空間-本地Hive metastore中的表,則隻能從包含該工作空間-本地表的工作空間訪問該視圖。由於這個原因,Databricks建議隻從統一目錄中的表或視圖創建視圖。

創建一個視圖

運行SQL命令創建視圖。括號中的項目是可選的。替換占位符值:

  • < catalog_name >:目錄名稱。

  • < schema_name >:模式名稱。

  • < view_name >:視圖的名稱。

  • <查詢>:用於組成視圖的查詢、列、表和視圖。

創建視圖<catalog_name><schema_name><view_name>作為選擇<查詢>
火花sql“創建視圖< catalog_name >, < schema_name >。< view_name >為““選擇<查詢>”
圖書館SparkRsql粘貼“創建視圖< catalog_name >, < schema_name >。< view_name >為““選擇<查詢>”9月""))
火花sql“創建視圖< catalog_name >, < schema_name >。< view_name >為“+“選擇<查詢>”

例如,創建名為sales_redacted中的列sales_raw表:

創建視圖sales_metastore銷售sales_redacted作為選擇user_id電子郵件國家產品總計sales_metastore銷售sales_raw
火花sqlsales_metastore.sales“創建視圖。sales_redacted為““選擇”“user_id。”“電子郵件”,“國家”,“產品”,“總”“從sales_metastore.sales.sales_raw”
圖書館SparkRsql粘貼sales_metastore.sales“創建視圖。sales_redacted為““選擇”“user_id。”“電子郵件”,“國家”,“產品”,“總”“從sales_metastore.sales.sales_raw”9月""))
火花sqlsales_metastore.sales“創建視圖。sales_redacted為“+“選擇”+“user_id。”+“電子郵件”,+“國家”,+“產品”,+“總”+“從sales_metastore.sales.sales_raw”

控件也可以創建視圖磚起程拓殖的提供者而且databricks_table.可以通過使用檢索視圖全名列表databricks_views

創建動態視圖

在Unity Catalog中,你可以使用動態視圖來配置細粒度的訪問控製,包括:

  • 列或行級別的安全性。

  • 數據屏蔽。

請注意

使用的集群上無法使用動態視圖進行細粒度訪問控製單用戶訪問模式

Unity Catalog引入了以下函數,允許你動態地限製哪些用戶可以訪問視圖中的行、列或記錄:

  • current_user ():返回當前用戶的電子郵件地址。

  • is_account_group_member ():返回真正的如果當前用戶是指定帳戶級別組的成員。推薦在Unity Catalog數據的動態視圖中使用。

  • is_member ():返回真正的如果當前用戶是特定工作空間級別組的成員。該功能是為了兼容現有的Hive metastore。避免在Unity Catalog數據視圖中使用它,因為它不評估帳戶級別的組成員關係。

下麵的例子演示了如何在Unity Catalog中創建動態視圖。

列級權限

使用動態視圖,可以限製特定用戶或組可以訪問的列。在下麵的示例中,隻有審計人員組可以訪問email地址sales_raw表格在查詢分析過程中,Apache Spark替換了情況下語句使用字符串字麵量修訂或者電子郵件地址欄的實際內容。其他列將正常返回。這種策略對查詢性能沒有負麵影響。

將“email”字段別名為“email”,以防止——權限邏輯直接顯示在列名結果中。創建視圖sales_redacted作為選擇user_id情況下is_account_group_member“審計師”然後電子郵件其他的“修訂”結束作為電子郵件國家產品總計sales_raw
#將“email”字段別名為“email”以防止#權限邏輯將直接顯示在列名結果中。火花sql創建視圖sales_redacted AS“選擇”“user_id。”Case when" is_account_group_member('auditors') THEN email "“否則‘被塗黑’”"以電子郵件結束,"“國家”,“產品”,“總”“從sales_raw”
圖書館SparkR#將“email”字段別名為“email”以防止#權限邏輯將直接顯示在列名結果中。sql粘貼創建視圖sales_redacted AS“選擇”“user_id。”Case when" is_account_group_member('auditors') THEN email "“否則‘被塗黑’”"以電子郵件結束,"“國家”,“產品”,“總”“從sales_raw”9月""))
//將字段'email'別名為'email',以防止//權限邏輯直接顯示在列名結果中。火花sql創建視圖sales_redacted AS+“選擇”+“user_id。”+Case when+" is_account_group_member('auditors') THEN email "+“否則‘被塗黑’”+"以電子郵件結束,"+“國家”,+“產品”,+“總”+“從sales_raw”

行級權限

使用動態視圖,您可以指定行或字段級別以下的權限。在下麵的示例中,隻有經理當交易金額超過$1,000,000時,團體可以查看交易金額。對其他用戶過濾匹配結果。

創建視圖sales_redacted作為選擇user_id國家產品總計sales_raw在哪裏情況下is_account_group_member“經理”然後真正的其他的總計< =1000000結束
火花sql創建視圖sales_redacted AS“選擇”“user_id。”“國家”,“產品”,“總”“從sales_raw””,““案例”" WHEN is_account_group_member('managers') THEN TRUE "" ELSE total <= 1000000 "“結束”
圖書館SparkRsql粘貼創建視圖sales_redacted AS“選擇”“user_id。”“國家”,“產品”,“總”“從sales_raw””,““案例”" WHEN is_account_group_member('managers') THEN TRUE "" ELSE total <= 1000000 "“結束”9月""))
火花sql創建視圖sales_redacted AS+“選擇”+“user_id。”+“國家”,+“產品”,+“總”+“從sales_raw”+”,“+“案例”+" WHEN 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並提取'example',允許#分析師查詢域名。火花sql創建視圖sales_redacted AS“選擇”“user_id。”“地區”,“案例”當is_account_group_member(' audit_group_member ')時發送郵件" ELSE regexp_extract(email, '^.*@(.*)$', 1) "“結束”“從sales_raw”
圖書館SparkRregexp_extract函數接受一個電子郵件地址,例如# user.x.lastname@example.com並提取'example',允許#分析師查詢域名。sql粘貼創建視圖sales_redacted AS“選擇”“user_id。”“地區”,“案例”當is_account_group_member(' audit_group_member ')時發送郵件" ELSE regexp_extract(email, '^.*@(.*)$', 1) "“結束”“從sales_raw”9月""))
// regexp_extract函數接受一個電子郵件地址,例如// user.x.lastname@example.com和提取'example',允許// analyzer查詢域名。火花sql創建視圖sales_redacted AS+“選擇”+“user_id。”+“地區”,+“案例”+當is_account_group_member(' audit_group_member ')時發送郵件+" ELSE regexp_extract(email, '^.*@(.*)$', 1) "+“結束”+“從sales_raw”