REFRESH MATERIALIZED VIEW - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

REFRESH MATERIALIZED VIEW

刷新具体化视图。

创建具体化视图时,其内容将反映当时基础数据库表的状态。具体化视图中的数据将保持不变,即使应用程序更改基础表中的数据也是如此。要更新具体化视图中的数据,您可以随时使用 REFRESH MATERIALIZED VIEW 语句。使用此语句时,Amazon Redshift 会标识已在一个或多个基表中进行的更改,然后将这些更改应用于具体化视图。

有关具体化视图的更多信息,请参阅在 Amazon Redshift 中创建具体化视图

Syntax

REFRESH MATERIALIZED VIEW mv_name

Parameters

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 操作和截断操作。有关事件和状态更改的更多信息,请参阅 STL_MV_STATE

增量刷新限制

Amazon Redshift 目前不支持使用以下任意 SQL 元素通过查询定义的具体化视图的递增刷新:

  • OUTER JOIN(RIGHT、LEFT 或 FULL)。

  • 集操作:UNION、INTERSECT、EXCEPT、MINUS。

  • 当它出现在子查询中,并且聚合函数或 GROUP BY 子句存在于查询中时,UNION ALL。

  • 聚合函数:AVG、MEDIAN、PERCENTILE_CONT、LISTAGG、STDDEV_SAMP、STDDEV_POP、APPROXIMATE COUNT、APPROXIMATE PERCENTILE 以及按位聚合函数。

    注意

    支持 COUNT 和 SUM 聚合函数。

  • DISTINCT 聚合函数,如 DISTINCT COUNT、DISTINCT SUM 等等。

  • 窗口函数。

  • 使用临时表进行查询优化的查询,例如优化常用的子表达式。

  • 在 FROM 子句以外的任何位置的子查询。

  • 在定义具体化视图的查询中作为基表引用的外部表。

  • 可变函数,如日期-时间函数,RANDOM 和非 STABLE 用户定义函数。

Examples

以下示例刷新 tickets_mv 具体化视图。

REFRESH MATERIALIZED VIEW tickets_mv;