在 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. 打开所选架构下的 “表 ”项,然后单击具体化视图。

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

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

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

更新具体化视图的定义

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

更改具体化视图的所有者

如果你既是元存储管理员,又是工作区管理员,则可以更改具体化视图的所有者。具体化视图会自动创建和使用 Lakeflow 声明性管道来处理更改。 使用以下步骤更改具体化视图所有者:

  • 目录资源管理器中打开具体化视图,然后在“ 概述 ”选项卡上,单击“ 查看刷新详细信息”。 这会打开管理具体化视图的管道的详细信息。
  • 单击“共享”。 将显示 权限设置 对话框。 必须是元存储和工作区管理员才能编辑这些设置。
  • 单击当前所有者名称右侧的 x 以删除当前所有者。
  • 开始键入内容以筛选可用用户列表。 单击要设为新管道所有者的用户。
  • 单击“保存”以保存更改并关闭对话框

所有管道资产(包括管道中定义的物化视图)均由新管道所有者拥有。 所有将来的更新都使用新所有者的标识运行。

当所有者失去对源表的权限时

如果更改所有者,并且新所有者无权访问源表(或 SELECT 对基础源表撤消特权),用户仍可查询具体化视图。 但是:

  • 他们不能 REFRESH 具体化视图。
  • 具体化视图的下一次计划刷新将失败。

失去对源数据的访问权限会阻止更新,但不会立即导致现有具体化视图无法被读取。

控制对具体化视图的访问

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

授予对具体化视图的权限

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

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

权限类型可以是:

  • 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权限的用户那里被撤销,或者源表被删除时,具体化视图所有者或被授予访问权限的用户仍能够查询具体化视图。 但是,会发生以下行为:

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

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

REVOKE SELECT ON mv_name FROM read_only_user;

设置运行时通道

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

Databricks 建议使用 current 通道来处理生产工作负荷。 新功能首先发布到 preview 频道。 可以将管道设置为预览 Lakeflow 声明性管道通道,以通过指定 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');