创建视图
这篇文章展示了如何在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数据的视图,因为它不评估帐户级别的组成员资格。
下面的例子演示了如何在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)