刷新具体化视图 - Amazon Redshift
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

刷新具体化视图

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

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

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

    • 包含子句 SELECT、FROM、[INNER] JOIN、WHERE、GROUP BY 或 HAVING 的构造。

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

    • 大多数内置 SQL 函数(尤其是不可变函数),前提是它们具有相同的输入参数并始终生成相同的输出。

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

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

Amazon Redshift 目前对于具体化视图的增量刷新具有以下限制。

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 子句以外的任何位置的子查询。

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

自动刷新具体化视图

当使用自动刷新选项创建或更改具体化视图时,Amazon Redshift 可以使用其基表中的最新数据自动刷新具体化视图。在基表发生更改后,Amazon Redshift 会尽快自动刷新具体化视图。

要完成最重要的具体化视图的刷新,同时最大程度地减小对集群中活动工作负载的影响,Amazon Redshift 考虑多个因素。这些因素包括当前系统负载、刷新所需的资源、可用的集群资源以及使用具体化视图的频率。

Amazon Redshift 优先于自动刷新,可能会停止自动刷新,以保持用户工作负载的性能。这种方法可能会延迟某些具体化视图的刷新。在某些情况下,您可能需要具体化视图的更确定性的刷新行为。如果是这样,请考虑按照REFRESH MATERIALIZED VIEW中所述使用手动刷新,或使用 Amazon Redshift 计划程序 API 操作或控制台计划刷新。

您可以使用 CREATE MATERIALIZED VIEW 为具体化视图设置自动刷新。您还可以使用 AUTO REFRESH 子句自动刷新具体化视图。有关创建具体化视图的更多信息,请参阅CREATE MATERIALIZED VIEW。您可以使用 更改具体化视图 为当前具体化视图启用自动刷新。

在刷新具体化视图时,请考虑以下事项:

  • 您仍然可以使用 REFRESH MATERIALIZED VIEW 命令显式刷新具体化视图,即使您尚未为具体化视图启用自动刷新。

  • Amazon Redshift 不会自动刷新在外部表上定义的具体化视图。

  • 对于刷新状态,您可以检查 SVL_MV_REFRESH_STATUS,这会记录用户启动或自动刷新的查询。

  • 要在仅计算具体化视图上运行 REFRESH,请确保您对架构具有 CREATE 权限。有关更多信息,请参阅GRANT