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

系统表和视图参考

系统表和视图

Amazon Redshift 有许多包含系统运行方式相关信息的系统表和视图。您可以像查询任何其他数据库表那样查询这些系统表和视图。本部分提供一些系统表查询示例并予以讲解:

  • 生成的系统表和视图的类型有何不同

  • 您可以从这些表中获得哪些类型的信息

  • 如何将 Amazon Redshift 系统表联接到目录表

  • 如何管理系统表日志文件的增长

某些系统表只能由 Amazon 人员用于诊断目的。以下部分讨论可供系统管理员或其他数据库用户查询有用信息的系统表。

注意

自动或手动集群备份(快照)中不包含系统表。STL 系统视图保留七天的日志历史记录。保留日志不要求客户执行任何操作,但如果需要将日志数据存储超过 7 天,则必须定期将日志数据复制到其他表,或将日志数据卸载到 Amazon S3。

系统表和视图类型

系统表和视图分为几种类型:

  • SVV 视图包含有关数据库对象的信息,并引用了临时 STV 表。

  • SYS 视图用于监控预置集群和无服务器工作组的查询和工作负载使用情况。

  • STL 视图从长久保存到磁盘的用于提供系统历史记录的日志生成。

  • STV 表是虚拟系统表,包含当前系统数据的快照。它们基于临时的内存数据,不会长久保存到基于磁盘的日志或常规表中。

  • SVCS 视图提供了有关主集群和并发扩展集群上的查询的详细信息。

  • SVL 视图提供有关主集群查询的详细信息。

系统表及视图不使用与常规表相同的一致性模型。在查询它们时,特别是查询 STV 表和 SVV 视图时,一定要注意这个问题。例如,对于包含列 c1 的常规表 t1,下面的查询不会返回任何行:

select * from t1 where c1 > (select max(c1) from t1)

但是,下面针对系统表的查询可能返回行:

select * from stv_exec_state where currenttime > (select max(currenttime) from stv_exec_state)

该查询可能返回行的原因在于:currenttime 是临时的,查询中的两个引用在求值时可能返回不同的值。

另一方面,下面的查询也可能不返回行:

select * from stv_exec_state where currenttime = (select max(currenttime) from stv_exec_state)

系统表和视图中的数据可见性

系统表及视图中的数据有两类可见性:对用户可见和对超级用户可见。

只有具有超级用户权限的用户才能看到属于超级用户可见类别的表中的数据。普通用户可以查看对用户可见的表中的数据。要使普通用户能够访问对超级用户可见的表,请向普通用户授予对该表的 SELECT 权限。有关更多信息,请参阅GRANT

默认情况下,在大多数对用户可见的表中,普通用户看不到其他用户生成的行。如果向普通用户授予 SYSLOG ACCESS UNRESTRICTED,则该用户可以查看用户可见表中的所有行,包括由其他用户生成的行。有关更多信息,请参阅 ALTER USERCREATE USER。SVV_TRANSACTIONS 中的所有行都对所有用户可见。有关数据可见性的更多信息,请参阅 Amazon Web Services re:Post 知识库文章如何允许 Amazon Redshift 数据库普通用户查看我的集群中其他用户系统表中的数据?

对于元数据视图,Amazon Redshift 不允许具有 SYSLOG ACCESS UNRESTRICTED 权限的用户查看。

注意

如果向用户授予对系统表的无限制访问权限,用户便可以看到由其他用户生成的数据。例如,STL_QUERY 和 STL_QUERY_TEXT 包含 INSERT、UPDATE 和 DELETE 语句的完整文本 (其中可能包含敏感的用户生成数据)。

超级用户可以查看所有表中的所有行。要使普通用户能够访问对超级客户可见的表,GRANT请向普通用户授予对该表的 SELECT 权限。

筛选系统生成的查询

与查询有关的系统表和视图(如 SVL_QUERY_SUMMARY、SVL_QLOG 等)通常包含大量自动生成的语句,Amazon Redshift 使用这些语句监控数据库的状态。这些系统生成的查询对超级用户可见,但用处不大。从使用 userid 列的系统表或视图中进行选择时,如果要过滤掉它们,则可在 WHERE 子句中添加条件 userid > 1。例如:

select * from svl_query_summary where userid > 1