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

在 Amazon Redshift 中创建具体化视图

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

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

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

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

有关如何创建具体化视图的信息,请参阅CREATE MATERIALIZED VIEW

您可以发出 SELECT 语句来查询具体化视图。有关如何查询具体化视图的信息,请参阅查询具体化视图

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

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

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

查询具体化视图

可以通过将具体化视图名称引用为数据源(例如表或标准视图)来在任何 SQL 查询中使用具体化视图。

当查询访问具体化视图时,它只会看到最近一次刷新时存储在具体化视图中的数据。因此,查询可能不会从具体化视图的相应基表中看到所有最新更改。

注意
  • 如果其他用户需要查询具体化视图,具体化视图的拥有者必须向这些用户授予 SELECT 权限。其他用户不需要对基础基表具有 SELECT 权限。

  • 具体化视图的拥有者还可以撤消其他用户的 SELECT 权限,以防止他们查询具体化视图。

  • 如果具体化视图的拥有者不再对基础基表具有 SELECT 权限,则:

    • 拥有者无法再查询具体化视图。

    • 对具体化视图具有 SELECT 权限的其他用户无法再查询具体化视图。

以下示例查询 tickets_mv 具体化视图。有关用于创建具体化视图的 SQL 命令的更多信息,请参阅CREATE MATERIALIZED VIEW

SELECT sold FROM tickets_mv WHERE catgroup = 'Concerts';

由于查询结果是预先计算的,因此无需访问基础表(categoryeventsales)。Amazon Redshift 可以直接从 tickets_mv 返回结果。