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

在 Amazon Redshift 中创建具体化视图

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

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

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

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

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

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

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

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

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

当具体化视图中的最新数据需要服务等级协议 (SLA) 时,执行此操作尤其有用。您还可以手动刷新可以自动刷新的任何具体化视图。有关如何创建具体化视图的信息,请参阅CREATE MATERIALIZED VIEW

您可以发出 SELECT 语句来查询具体化视图。有关如何查询具体化视图的信息,请参阅查询具体化视图。在基表中插入、更新和删除数据时,结果集最终会变得过时。您可以随时刷新具体化视图,以使用基表中的最新更改对其进行更新。有关如何刷新具体化视图的信息,请参阅REFRESH MATERIALIZED VIEW

有关用于创建和管理具体化视图的 SQL 命令的详细信息,请参阅以下命令主题:

有关用于监视具体化视图的系统表和视图的信息,请参阅以下主题: