创建视图

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

下面的例子演示了如何在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