在 Databricks SQL 中配置具体化视图

本文介绍如何在 Databricks SQL 中配置具体化视图,包括对结果的访问控制。 创建具体化视图时可以通过 CREATE OR REPLACE MATERIALIZED VIEW 语句进行大多数配置,或者在创建之后,可以通过 ALTER TABLE 语句进行配置。

描述具体化视图

若要检索具体化视图的列和数据类型,请使用 DESCRIBE 语句。 若要检索具体化视图的列、数据类型和元数据,例如所有者、位置、创建时间和刷新状态,请使用 DESCRIBE EXTENDED。 若要提交 DESCRIBE 语句,请在 Azure Databricks UI、 Databricks SQL CLIDatabricks SQL API 中使用 SQL 编辑器。

使用目录资源管理器获取有关具体化视图的详细信息

您也可以使用目录资源管理器来查看具体化视图的详细信息。

  1. 点击边栏中的“数据”图标目录
  2. 在左侧的目录资源管理器树中,打开目录并选择具体化视图所在的架构。
  3. 打开所选架构下的 “表 ”项,然后单击具体化视图。

在此处,可以使用具体化视图名称下的选项卡查看和编辑有关具体化视图的信息,包括:

  • 更新状态与时间表
  • 请参阅管道详细信息以查看刷新历史记录,以及每个刷新的详细日志。 单击“概述”选项卡中的“查看刷新详细信息”以查看管道详细信息。
  • 表架构
  • 示例数据(需要活动计算)
  • Permissions
  • 世系,包括此具体化视图所依赖的表和管道
  • 深入了解使用情况
  • 你为此具体化视图创建的监控器

在目录资源管理器中,有几个表的属性不可用。 对于这些属性,或者要以编程方式获取信息,可以使用 DESCRIBE EXTENDED 命令。

更新具体化视图的定义

指定具体化视图的查询是其定义。 若要更改具体化视图的定义,请编辑查询,或者使用相同的视图名称创建新的 CREATE 或 REPLACE MATERIALIZED VIEW 查询,然后运行它。 执行完整刷新以更新物化视图,后续刷新使用新定义。

控制对具体化视图的访问

具体化视图支持丰富的访问控制来支持数据共享,同时避免公开潜在的私有数据。 具体化视图所有者或具有 MANAGE 特权的用户可以向其他用户授予 SELECT 权限。 有权 SELECT 访问具体化视图的用户不需要 SELECT 访问具体化视图引用的表。 此访问控制支持数据共享,同时控制对基础数据的访问。

向具体化视图授予特权

若要授予对具体化视图的访问权限,请使用 GRANT 语句

GRANT <privilege_type> ON <mv_name> TO <principal>;

privilege_type 可以是:

  • SELECT - 用户可以 SELECT 具体化视图。
  • REFRESH - 用户可以 REFRESH 具体化视图。 刷新是使用所有者的权限运行的。

以下示例创建具体化视图并向用户授予选择和刷新权限:

CREATE MATERIALIZED VIEW mv_name AS SELECT * FROM source_table;

-- Grant read-only access:
GRANT SELECT ON mv_name TO read_only_user;

-- Grand read and refresh access:
GRANT SELECT ON mv_name TO refresh_user;
GRANT REFRESH ON mv_name TO refresh_user;

从具体化视图撤消特权

若要从具体化视图撤消访问权限,请使用 REVOKE 语句

REVOKE privilege_type ON <mv_name> FROM principal;

当从具体化视图的所有者或任何已被授予对具体化视图的SELECTMANAGE特权的用户撤销源表的SELECT特权,或者源表被删除时,具体化视图的所有者或被授予访问权限的用户仍然可以查询具体化视图。 但是,会发生以下行为:

  • 具体化视图所有者或失去具体化视图访问权限的其他人无法再 REFRESH 获得具体化视图,具体化视图将变得过时。
  • 如果计划自动执行,则下一个计划 REFRESH 失败或未运行。

以下示例从 SELECT 撤销了 read_only_user 权限:

REVOKE SELECT ON mv_name FROM read_only_user;

设置运行时通道

使用 SQL 仓库创建的具体化视图使用管道自动刷新。 管道默认使用 current 通道中的运行时。 请参阅 Lakeflow Spark 声明性管道发行说明和发布升级过程 ,了解发布过程。

Databricks 建议使用 current 通道来处理生产工作负荷。 新功能首先发布到 preview 频道。 可以通过指定 preview 为表属性,将管道设置为预览通道以测试新功能。 可以在创建表时或使用 ALTER 语句创建表后指定此属性。

下面的代码示例演示如何在 CREATE 语句中将通道设置为预览:

CREATE OR REPLACE MATERIALIZED VIEW sales
TBLPROPERTIES ('pipelines.channel' = 'preview')
  AS ...

若要在创建后更改通道,请使用 ALTER TABLE 语句:

ALTER TABLE <table-name> SET TBLPROPERTIES ('pipelines.channel' = 'preview');