REFRESH MATERIALIZED VIEW
刷新实体化视图。
创建实体化视图时,其内容将反映当时基础数据库表的状态。实体化视图中的数据将保持不变,即使应用程序更改基础表中的数据也是如此。要更新实体化视图中的数据,您可以随时使用 REFRESH MATERIALIZED VIEW
语句。使用此语句时,Amazon Redshift 会标识已在一个或多个基表中进行的更改,然后将这些更改应用于实体化视图。
有关实体化视图的更多信息,请参阅Amazon Redshift 中的实体化视图。
语法
REFRESH MATERIALIZED VIEW mv_name
参数
- mv_name
-
要刷新的实体化视图的名称。
使用说明
只有实体化视图的拥有者才能对该实体化视图执行 REFRESH MATERIALIZED
VIEW
操作。此外,所有者必须对基础基表具有 SELECT 权限才能成功运行 REFRESH
MATERIALIZED VIEW
。
REFRESH MATERIALIZED VIEW
命令作为其自己的事务运行。遵循 Amazon Redshift 事务语义来确定基表中的哪些数据对于 REFRESH
命令是可见的,或者何时使命令 REFRESH
所做的更改对 Amazon Redshift 中运行的其他事务可见。
-
对于增量实体化视图,
REFRESH MATERIALIZED VIEW
操作仅使用那些已提交的基表行。因此,如果刷新操作在同一事务中的数据操作语言 (DML) 语句之后运行,则对该 DML 语句的更改将对于刷新不可见。 -
对于实体化视图的完全刷新,根据通常的 Amazon Redshift 事务语义,
REFRESH MATERIALIZED VIEW
会看到对刷新事务可见的所有基表行。 -
根据输入参数类型,Amazon Redshift 仍支持以下采用特定输入参数类型的函数所对应的实体化视图的增量刷新:DATE(时间戳)、DATE_PART(日期、时间、间隔、time-tz)、DATE_TRUNC(时间戳、间隔)。
-
基表位于数据共享中的实例化视图支持增量刷新。
Amazon Redshift 中的一些操作会与实体化视图进行交互。这些操作中的某些操作可能会强制 REFRESH MATERIALIZED VIEW
完全重新计算实体化视图,即使定义该视图的查询仅使用可以用于增量刷新的 SQL 功能。例如:
-
如果未刷新实体化视图,则可能会阻止后台 vacuum 操作。在内部定义的阈值期后,将允许运行 vacuum 操作。在发生此 vacuum 操作时,所有依赖的实体化视图都将标记为在下次刷新时重新计算(即使它们是增量的)。有关 VACUUM 的信息,请参阅 VACUUM。有关事件和状态更改的更多信息,请参阅 STL_MV_STATE。
-
一些由用户对基表发起的操作会强制在下次运行 REFRESH 操作时完全重新计算实体化视图。此类操作的示例包括手动调用的 VACUUM、经典调整大小、ALTER DISTKEY 操作、ALTER SORTKEY 操作和截断操作。在某些情况下,自动操作还可能导致在下次运行 REFRESH 操作时完全重新计算实体化视图。例如,auto-vacuum 删除操作可能会导致完全重新计算。有关事件和状态更改的更多信息,请参阅 STL_MV_STATE。
对数据共享中的实体化视图进行增量刷新
在共享基表时,Amazon Redshift 支持对消费者数据共享中的实体化视图进行自动和增量刷新。增量刷新是一项操作,其中 Amazon Redshift 可识别上次刷新后发生的一个或多个基表中的更改,并仅更新实体化视图中的相应记录。有关此行为的更多信息,请参阅 CREATE MATERIALIZED VIEW。
增量刷新限制
Amazon Redshift 目前不支持使用以下任意 SQL 元素通过查询定义的实体化视图的递增刷新:
-
OUTER JOIN(RIGHT、LEFT 或 FULL)。
-
集操作:UNION、INTERSECT、EXCEPT、MINUS。
-
当它出现在子查询中,并且聚合函数或 GROUP BY 子句存在于查询中时,UNION ALL。
-
聚合函数:MEDIAN、PERCENTILE_CONT、LISTAGG、STDDEV_SAMP、STDDEV_POP、APPROXIMATE COUNT、APPROXIMATE PERCENTILE 以及按位聚合函数。
注意
支持 COUNT、SUM、MIN、MAX 和 AVG 聚合函数。
-
DISTINCT 聚合函数,如 DISTINCT COUNT、DISTINCT SUM 等等。
-
窗口函数。
-
使用临时表进行查询优化的查询,例如优化常用的子表达式。
-
子查询
-
在定义实体化视图的查询中引用以下格式的外部表。
-
Delta Lake
-
Hudi
对于使用引用其他格式的外部表定义的实体化视图,预览版跟踪支持增量刷新。有关设置预览版集群的更多信息,请参阅《Amazon Redshift 管理指南》中的创建预览版集群。有关设置预览工作组的信息,请参阅《Amazon Redshift 管理指南》中的创建预览工作组。
-
可变函数,如日期-时间函数,RANDOM 和非 STABLE 用户定义函数。
有关零 ETL 集成的增量刷新限制,请参阅将零 ETL 集成与 Amazon Redshift 结合使用时的注意事项。
有关实体化视图限制的更多信息,包括 VACUUM 等后台操作对实体化视图刷新操作的影响,请参阅使用说明。
示例
以下示例刷新 tickets_mv
实体化视图。
REFRESH MATERIALIZED VIEW tickets_mv;