适用于:
Databricks SQL
更改与视图关联的元数据。
允许执行以下任一操作:
- 添加用于刷新现有具体化视图的计划。
- 更改具体化视图的现有刷新计划。
- 删除具体化视图的刷新计划。 如果删除了计划,则需要手动刷新对象以反映最新数据。
若要添加或更改具体化视图的注解,请使用 COMMENT ON。
注意
以与定义 SQL 矛盾的方式更改管道创建的数据集可能会导致某些更改被撤销。 请参阅 将 ALTER 命令与 Lakeflow Spark 声明式管道配合使用。
语法
ALTER MATERIALIZED VIEW view_name
{
{ ADD | ALTER } schedule |
DROP SCHEDULE |
ALTER COLUMN column_clause |
SET ROW FILTER clause |
DROP ROW FILTER |
SET TAGS clause |
UNSET TAGS clause }
schedule
{ SCHEDULE [ REFRESH ] schedule_clause |
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ] }
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
column_clause
column_identifier
{ COMMENT clause |
SET MASK clause |
DROP MASK |
SET TAGS clause |
UNSET TAGS clause }
参数
-
要更改其定义的具体化视图的名称。 名称不得包含时态规范。
附表
在具体化视图中添加或更改语句
SCHEDULETRIGGER。注意
不能使用此命令修改使用 Lakeflow Spark 声明性管道创建的具体化视图的计划。 使用 管道编辑器。
SCHEDULE [ REFRESH ] schedule_clauseEVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }要安排定期进行的刷新,请使用
EVERY语法。 如果指定了EVERY语法,则会按照指定的间隔根据提供的值(如HOUR、HOURS、DAY、DAYS、WEEK或WEEKS)定期刷新流式处理表或具体化视图。 下表列出了number可接受的整数值。时间单位 整数值 HOUR or HOURS1 < = H < = 72 DAY or DAYS1 < = D < = 31 WEEK or WEEKS1 < = W < = 8 注意
包含的时间单位的单数形式和复数形式在语义上是等效的。
CRON cron_string [ AT TIME ZONE timezone_id ]使用 qartz cron 值安排刷新。 接受有效 time_zone_values。 不支持
AT TIME ZONE LOCAL。如果
AT TIME ZONE不存在,则使用会话时区。 如果AT TIME ZONE不存在并且未设置会话时区,则会引发错误。SCHEDULE在语义上等效于SCHEDULE REFRESH。
TRIGGER ON UPDATE [ AT MOST EVERY trigger_interval ]重要
此功能
TRIGGER ON UPDATE在 Beta 版中。设置具体化视图,以便在每次更新上游数据源时刷新一次。 设置一个值
AT MOST EVERY,以便在刷新之间至少需要一个最短的时间。上游数据源必须是外部表或托管的 Delta 表(包括具体化视图或流式处理表),或者依赖项仅限于支持的表类型的托管视图。
启用 文件事件 可以使触发器更具性能,并增加触发器更新的一些限制。
trigger_interval这是至少 1 分钟的 INTERVAL 语句。TRIGGER ON UPDATE具有以下限制- 使用 TRIGGER ON UPDATE 时,物化视图的上游数据源不得超过10个。
- 一次最多可用 TRIGGER ON UPDATE 指定 1000 个流表或具体化视图。
- 子
AT MOST EVERY句默认为 1 分钟,不能小于 1 分钟。
DROP SCHEDULE从物化视图中删除时间表。
ALTER COLUMN clause请参阅 ALTER COLUMN 子句。
SETROW FILTER 条款重要
此功能目前以公共预览版提供。
在具体化视图中添加行筛选器函数。 对具体化视图的所有后续查询都接收函数计算结果为布尔
TRUE值的行的子集。 这对于细粒度的访问控制目的非常有用,在这种情况下,该函数可以检查调用用户的身份或组成员身份,以决定是否筛选特定行。创建后添加的行筛选器仅在下次更新后传播到下游表。 对于连续管道,这需要重启管道。
DROP ROW FILTER重要
此功能目前以公共预览版提供。
从物化视图中删除行筛选器(如果有)。 未来查询将返回表中的所有行,而无任何自动筛选。
SET TAGS ( { tag_name = tag_value } [, ...] )重要
此功能目前以公共预览版提供。
将标记应用于具体化视图。 需要拥有
APPLY TAG权限以将标记添加到具体化视图。tag_name文本
STRING。 在物化视图或列内,tag_name必须是唯一的。tag_value文本
STRING。
UNSET TAGS ( tag_name [, ...] )重要
此功能目前以公共预览版提供。
从具体化视图中删除标记。 您需要有
APPLY TAG权限才能从具体化视图中删除标记。tag_name文本
STRING。 在物化视图或列内,tag_name必须是唯一的。
ALTER COLUMN 子句
重要
此功能目前以公共预览版提供。
更改列的属性或位置。
语法
ALTER COLUMN
column_identifier
{ COMMENT comment |
SET MASK mask_clause |
DROP MASK |
SET TAGS clause |
UNSET TAGS clause }
参数
-
要更改的列的名称。
COMMENT comment更改
column_name列的说明。comment必须是STRING文本。SETMASK 子句添加列掩码函数以对敏感数据进行匿名化处理。 该列的所有后续查询将会收到对该列计算该函数(而不是该列的原始值)的结果。 这对于细粒度的访问控制目的非常有用,在这种情况下,该函数可以检查调用用户的身份或组成员身份,以确定是否编辑该值。
创建后添加的列掩码仅在下次更新后传播到下游表。 对于连续管道,这需要重启管道。
DROP MASK移除此列的列掩码(如果有)。 将来从此列进行查询会收到此列的原始值。
SET TAGS ( { tag_name = tag_value } [, ...] )将标记应用于列。 需要具有
APPLY TAG权限才能向列添加标记。tag_name
文本
STRING。tag_name在表或列中必须唯一。tag_value
文本
STRING。
UNSET TAGS ( tag_name [, ...] )从列中删除给定的标记。 需要具有
APPLY TAG权限才能从列中移除标记。tag_name
文本
STRING。tag_name在表或列中必须唯一。
示例
-- Adds a schedule to refresh the materialized view whenever its upstream data gets updated.
> ALTER MATERIALIZED VIEW my_mv
ADD TRIGGER ON UPDATE;
-- Alters the schedule to refresh the materialized view when its upstream data
-- gets updated, and make sure the update frequency is no more than 1 update
-- per hour.
> ALTER MATERIALIZED VIEW my_mv
ALTER TRIGGER ON UPDATE AT MOST EVERY INTERVAL 1 hour;
-- Alters the schedule to run every two hours for a materialized view
> ALTER MATERIALIZED VIEW my_mv
ALTER SCHEDULE EVERY 2 HOURS;
-- Alters the schedule to refresh a materialized view once a day
-- at midnight in Los Angeles
> ALTER MATERIALIZED VIEW my_mv
ALTER SCHEDULE CRON '0 0 0 * * ? *' AT TIME ZONE 'America/Los_Angeles';
-- Drops the schedule for a materialized view
> ALTER MATERIALIZED VIEW my_mv
DROP SCHEDULE;
-- Adds a column comment
> ALTER MATERIALIZED VIEW my_mv
ALTER COLUMN my_column_name COMMENT 'test'