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

从 2025 年 11 月 1 日起,Amazon Redshift 将不再支持创建新的 Python UDF。如果您想要使用 Python UDF,请在该日期之前创建 UDF。现有的 Python UDF 将继续正常运行。有关更多信息,请参阅博客文章

REFRESH MATERIALIZED VIEW

刷新实体化视图。

创建实体化视图时,其内容将反映当时基础数据库表的状态。实体化视图中的数据将保持不变,即使应用程序更改基础表中的数据也是如此。

要更新实体化视图中的数据,您可以随时使用 REFRESH MATERIALIZED VIEW 语句。使用此语句时,Amazon Redshift 会标识已在一个或多个基表中进行的更改,然后将这些更改应用于实体化视图。

有关实体化视图的更多信息,请参阅Amazon Redshift 中的实体化视图

语法

REFRESH MATERIALIZED VIEW mv_name [ RESTRICT | CASCADE ]

参数

mv_name

要刷新的实体化视图的名称。

RESTRICT

可选关键字。刷新指定的实体化视图,但不刷新其相关实体化视图。如果既未指定 RESTRICT,也未指定 CASCADE,则为默认值。

CASCADE

可选关键字。刷新指定的实体化视图及其所有相关实体化视图。

使用说明

只有实体化视图的拥有者才能对该实体化视图执行 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

级联刷新

CASCADE 选项按相关性顺序来刷新指定的实体化视图及其所有相关实体化视图:先刷新基本 MV,然后再刷新顶部的 MV(拓扑排序)。这可让您在单个命令中更新一组嵌套的实体化视图。

RESTRICT 选项(如果既未指定 RESTRICT,也未指定 CASCADE,则该选项为默认值)仅刷新指定的实体化视图。

使用 CASCADE 选项时,以下规则适用:

  • 只有实体化视图的所有者或超级用户才可执行 REFRESH MATERIALIZED VIEW ... CASCADE 命令。

  • 如果无法刷新级联中的任何实体化视图,则整个级联操作将停止。

只有嵌套在本地和流式实体化视图之上的 MV 才支持级联刷新功能。在级联模式下不支持具有其它源类型(例如 Spectrum 或数据共享)的实体化视图。CASCADE 在单个事务中对所有嵌套 MV 执行刷新。

对数据共享中的实体化视图进行增量刷新

在共享基表时,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 Spectrum 中外部数据湖表的实体化视图

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

  • 有关零 ETL 集成的增量刷新限制,请参阅将零 ETL 集成与 Amazon Redshift 结合使用时的注意事项

  • 从多个数据库访问表。

有关实体化视图限制的更多信息,包括 VACUUM 等后台操作对实体化视图刷新操作的影响,请参阅使用说明

示例

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

REFRESH MATERIALIZED VIEW tickets_mv;

以下示例刷新 products_mv 实体化视图及其所有相关实体化视图:

REFRESH MATERIALIZED VIEW products_mv CASCADE;