

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# Amazon Redshift 中的实体化视图
<a name="materialized-view-overview"></a>

本节介绍如何在 Amazon Redshift 中创建和使用实体化视图。实体化视图是一个存储查询结果的数据库对象，可用于提高性能和效率。

在数据仓库环境中，应用程序经常必须要对大型表执行复杂的查询。例如 SELECT 语句，此类语句对包含数十亿行的表执行多表联接和聚合。就系统资源和计算结果所需的时间而言，处理这些查询的成本可能会很高。

Amazon Redshift 中的实体化视图提供了解决这些问题的方法。*实体化视图* 包含一个预计算的结果集，该结果集基于对一个或多个基表进行的 SQL 查询。您可以发出 SELECT 语句来查询实体化视图，这与查询数据库中的其他表或视图的方式相同。Amazon Redshift 从实体化视图返回预先计算的结果，根本不必访问基表。从用户的角度来看，与从基表中检索相同的数据相比，查询结果的返回速度要快得多。

实体化视图对于加快可预测和重复的查询特别有用。应用程序可以查询实体化视图并检索预先计算的结果集，而不是对大型表（例如聚合或多联接）执行资源密集型查询。例如，考虑使用一组查询填充控制面板的情形，例如 Amazon Quick。该使用案例非常适合实体化视图，因为查询是可预测的，并且会反复重复。

您可以根据其他实体化视图定义实体化视图。使用*实体化视图上的实体化视图*来扩展实体化视图的功能。通过此方法，现有实体化视图与查询检索数据的基表扮演的角色相同。

此方法对于重复使用不同的聚合或 GROUP BY 选项的预计算联接特别有用。例如，使用实体化视图，该视图将客户信息（包含数百万行）与项目订单详细信息（包含数十亿行）联接起来。该查询费用高昂，可以按需重复计算。对于在此实体化视图之上创建的实体化视图，可以使用不同的 GROUP BY 选项，并且可以与其他表联接。这样做可以节省每次运行昂贵的底层联接所需的计算时间。[STV\_MV\_DEPS](r_STV_MV_DEPS.md)表显示了一个实体化视图与其他实体化视图的依赖关系。

在您创建实体化视图时，Amazon Redshift 会运行用户指定的 SQL 语句以从一个或多个基表中收集数据并存储结果集。下图概述了 SQL 查询使用两个基表 `events` 和 `sales` 定义的实体化视图 `tickets_mv`。

![使用两个基表中的数据定义的实体化视图。](http://docs.amazonaws.cn/redshift/latest/dg/images/materialized-view.png)


然后，您可以在查询中使用这些实体化视图来加快它们的速度。此外，Amazon Redshift 可以自动重写这些查询以使用实体化视图，即使查询没有显式引用实体化视图也是如此。当您无法将查询更改为使用实体化视图时，自动重写查询在增强性能方面特别强大。

要更新实体化视图中的数据，您可以随时使用 REFRESH MATERIALIZED VIEW 语句手动刷新实体化视图。Amazon Redshift 会标识已在一个或多个基表中进行的更改，然后将这些更改应用于实体化视图。由于查询的自动重写要求实体化视图是最新的，因此作为实体化视图的拥有者，请确保在基表发生更改时刷新实体化视图。

Amazon Redshift 提供了几种方法来保持实体化视图的最新状态，以便自动重写。您可以使用自动刷新选项配置实体化视图，以便在更新实体化视图的基表时刷新实体化视图。此自动刷新操作在集群资源可用时运行，以最大限度地减少对其他工作负载的中断。由于自动刷新的计划取决于工作负载，因此您可以更好地控制 Amazon Redshift 刷新实体化视图的时间。您可以使用 Amazon Redshift 调度程序 API 和控制台集成来计划实体化视图刷新任务。有关查询调度的更多信息，请参阅[在 Amazon Redshift 控制台上调度查询](https://docs.amazonaws.cn/redshift/latest/mgmt/query-editor-schedule-query.html)。

当实体化视图中的最新数据需要服务等级协议 (SLA) 时，执行此操作尤其有用。您还可以手动刷新可以自动刷新的任何实体化视图。有关如何创建实体化视图的信息，请参阅[CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)。

您可以发出 SELECT 语句来查询实体化视图。有关如何查询实体化视图的信息，请参阅[实体化视图查询](materialized-view-query.md)。在基表中插入、更新和删除数据时，结果集最终会变得过时。您可以随时刷新实体化视图，以使用基表中的最新更改对其进行更新。有关如何刷新实体化视图的信息，请参阅[REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)。

有关用于创建和管理实体化视图的 SQL 命令的详细信息，请参阅以下命令主题：
+ [CREATE MATERIALIZED VIEW](materialized-view-create-sql-command.md)
+ [ALTER MATERIALIZED VIEW](r_ALTER_MATERIALIZED_VIEW.md)
+ [REFRESH MATERIALIZED VIEW](materialized-view-refresh-sql-command.md)
+ [DROP MATERIALIZED VIEW](materialized-view-drop-sql-command.md)

有关用于监视实体化视图的系统表和视图的信息，请参阅以下主题：
+ [STV\_MV\_INFO](r_STV_MV_INFO.md)
+ [STL\_MV\_STATE](r_STL_MV_STATE.md)
+ [SVL\_MV\_REFRESH\_STATUS](r_SVL_MV_REFRESH_STATUS.md)
+ [STV\_MV\_DEPS](r_STV_MV_DEPS.md)

**Topics**
+ [实体化视图查询](materialized-view-query.md)
+ [自动查询重写以使用实体化视图](materialized-view-auto-rewrite.md)
+ [Amazon Redshift Spectrum 中外部数据湖表的实体化视图](materialized-view-external-table.md)
+ [刷新实体化视图](materialized-view-refresh.md)
+ [自动实体化视图](materialized-view-auto-mv.md)
+ [在实体化视图中使用用户定义的函数 (UDF)](materialized-view-UDFs.md)
+ [流式摄取到实体化视图](materialized-view-streaming-ingestion.md)