ALTER TABLE ... MODIFY QUERY 语句修改创建 materialized view 时指定的 SELECT 查询,而无需中断摄取过程。
此命令用于修改通过 TO [db.]name 子句创建的 materialized view。它不会更改底层存储表的结构,也不会更改 materialized view 的列定义,因此,对于未使用 TO [db.]name 子句创建的 materialized view,此命令的适用范围非常有限。
带 TO 表的示例
SELECT 部分,无法添加新列。
所需特权
ALTER TABLE ... MODIFY QUERY 需要对该视图拥有 ALTER VIEW MODIFY QUERY 特权。新查询会以该视图的 SQL security 运行,因此该语句还需要具备创建使用该 SQL security 的视图时所需的授权:
SQL SECURITY DEFINER且 definer 不是当前用户:需要对该 definer 拥有SET DEFINER。SQL SECURITY NONE:需要ALLOW SQL SECURITY NONE。
MODIFY SQL SECURITY 更改了 SQL security,则上述授权要求针对的是新的 SQL security,而不是原有的 SQL security。
使用 ON CLUSTER 时,语句会在其运行所在的主机上进行授权校验,因此该主机上必须存在该视图,否则语句将失败并返回 UNKNOWN_TABLE。
ALTER TABLE … MODIFY REFRESH 语句
ALTER TABLE ... MODIFY REFRESH 用于更改可刷新materialized view 的刷新参数,包括调度、依赖关系、随机化以及刷新设置。
EVERY 或 AFTER) 是必需的:该语句会一次性替换所有刷新参数。任何未指定的子句——RANDOMIZE FOR、DEPENDS ON 或 SETTINGS——都会被移除或重置为默认值。若只想更改刷新设置,请重复当前调度。
该命令会就地更新现有视图的刷新配置,无需重新创建 materialized view 或其目标表,也不会清除现有目标数据或取消正在进行的刷新。更改配置期间,读取操作会继续针对现有目标表进行。
使用相同的完整 REFRESH 规范重复执行该命令是安全的。请务必重复应保留配置的每个子句,因为如上所述,每次执行都会替换所有刷新参数。
- 不支持对 materialized view 执行
ALTER TABLE ... MODIFY SETTING;刷新设置只能通过MODIFY REFRESH修改。 - 不支持添加或移除
APPEND。 - 视图创建后,无法更改
all_replicas刷新设置。
system.view_refreshes 中查看。