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

REFRESH MATERIALIZED VIEW

刷新具体化视图。

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

Amazon Redshift 有两种刷新具体化视图的策略:

  • 在许多情况下,Amazon Redshift 可以执行增量刷新。在增量刷新 中,Amazon Redshift 将快速识别自上次刷新以来对基表中的数据所做的更改,并更新具体化视图中的数据。在定义具体化视图时,支持增量刷新或遵循查询中使用的 SQL 结构。

    • 包含子句 SELECT、FROM、[INNER] JOIN、WHERE、GROUP BY、HAVING.

    • 包含聚合,例如 SUM 和 COUNT。

    • 大多数内置 SQL 函数(尤其是那些不可变的 SQL 函数),给定相同的输入参数并始终产生相同的输出。有关不支持增量刷新的 SQL 函数的列表,请参阅增量刷新限制

  • 如果无法执行增量刷新,Amazon Redshift 将执行完全刷新。完全刷新 将重新运行基础 SQL 语句,并替换具体化视图中的所有数据。

  • Amazon Redshift 自动为具体化视图选择刷新方法,具体取决于用于定义具体化视图的 SELECT 查询。

有关具体化视图的更多信息,请参阅在 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 语句的更改将对于刷新不可见。

  • 此外,考虑事务 B 跟随事务 A 的情况。在这种情况下,当较旧的事务 A 正在进行时,提交 B 后发布的 REFRESH MATERIALIZED VIEW 看不到由事务 B 更新的某些已提交的基表行。在提交事务 A 后,这些省略的行由后续刷新操作更新。

  • 对于具体化视图的完全刷新,根据通常的 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。

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

    注意

    支持 COUNT 和 SUM 聚合函数。

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

  • 窗口函数。

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

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

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

示例

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

REFRESH MATERIALIZED VIEW tickets_mv;