什么是视图?
视图是只读对象,它是对 Unity 目录元存储中的一个或多个表和视图进行查询的结果。 可以通过多个架构和目录中的表和其他视图创建视图。
本文介绍可以在 Azure Databricks 中创建的视图,并提供查询这些视图所需的权限和计算的说明。
有关创建视图的信息,请参阅:
在 Unity Catalog 中,视图位于三级命名空间的第三级别 (catalog.schema.view
):
视图通常针对元存储中的一个或多个数据源或表存储查询的文本。 在 Azure Databricks 中,视图等效于作为架构中的对象保留的 Spark DataFrame。 与 DataFrame 不同,你可以从 Azure Databricks 中的任何位置查询视图,前提是你有权执行此操作。 创建视图时不会处理或写入任何数据。 只有查询文本会注册到关联架构中的元存储。
备注
如果为视图提供支持的数据源不是 Delta 表,则视图可能具有不同的执行语义。 Databricks 建议始终使用表或视图名称引用数据源来定义视图。 通过指定路径或 URI 定义数据集视图可能会导致数据治理需求混乱。
具体化视图以增量方式计算和更新定义查询返回的结果。
可以使用 Databricks SQL 在 Unity Catalog 中注册具体化视图,或将其定义为 Delta Live Tables 管道的一部分。 请参阅在 Databricks SQL 中使用具体化视图和什么是 Delta Live Tables?。
临时视图的范围和持久性有限,它不注册到架构或目录。 临时视图的生存期因所使用的环境而异:
- 在笔记本和作业中,临时视图的范围限定为笔记本或脚本级别。 它们不能在声明了它们的笔记本之外引用,并且当笔记本从群集分离时它们将不再存在。
- 在 Databricks SQL 中,临时视图的范围限定为查询级别。 同一查询中的多个语句可以使用临时视图,但不能在其他查询中引用,即使在同一仪表板中也是如此。
动态视图除了用于数据掩码外,还可用于提供行级和列级访问控制。 请参阅创建动态视图。
可以针对任何数据源定义旧版 Hive 视图,并在旧版 Hive 元存储中注册它们。 Databricks 建议将所有旧版 Hive 视图迁移到 Unity Catalog。 请参阅 Hive 元存储中的视图。
全局临时视图是一项旧的 Azure Databricks 功能,它让你可以注册可用于针对计算资源运行的所有工作负载的临时视图。 全局临时视图是 Hive 和 HDFS 的遗留物。 Databricks 不建议使用全局临时视图。
若要读取在 Unity 目录中注册的视图,所需的权限取决于计算类型、Databricks Runtime 版本和访问模式。
备注
对于所有视图,权限检查不仅针对视图本身,还针对其所依赖的基础表和视图进行。 检查哪些用户在基础表和视图中的权限取决于计算。 对于以下内容,Unity 目录检查视图所有者对基础数据的权限:
- SQL 仓库。
- 共享计算。
- 启用了精细访问控制的 Databricks Runtime 15.4 LTS 及更高版本上的单用户计算。
对于在 Databricks Runtime 15.3 及更低版本上的单用户计算,Unity Catalog 会检查视图所有者和视图使用者对基础数据的权限。
此行为反映在下面列出的要求中。 无论哪种情况,视图所有者都必须维护对基础数据的权限,以便查看用户访问视图。
- 对于所有计算资源,必须对视图本身具有
SELECT
权限,对其父目录具有USE CATALOG
权限,对其父架构具有USE SCHEMA
权限。 这适用于支持 Unity Catalog 的所有计算类型,包括 SQL 仓库、共享访问模式下的群集,以及 Databricks Runtime 15.4 及更高版本上单用户访问模式中的群集。 - 对于使用单用户访问模式的 Databricks Runtime 15.3 及更低版本中的群集,除了对其父目录具有
USE CATALOG
权限和对其父架构具有USE SCHEMA
权限之外,还必须对视图引用的所有表和视图具有SELECT
权限。
备注
如果在 Databricks Runtime 15.4 LTS 及更高版本上使用单用户群集,并且希望避免对底层表和视图有 SELECT
的要求,请验证你的工作区已启用无服务器计算。
无服务器计算处理数据筛选,允许访问视图,而无需对其基础表和视图拥有权限。 请注意,使用单用户计算查询视图时,可能需要支付无服务器计算资源的费用。 有关详细信息,请参阅单用户计算上的精细访问控制。