View a markdown version of this page

查询系统表 - Amazon Redshift

从补丁 198 开始,Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息,请参阅博客文章

查询系统表

如果驱动程序元数据 API 和 SHOW 命令都无法满足您的需要,则可以直接查询 PostgreSQL 目录表 (pg_*)、信息架构 (information_schema) 或 Amazon Redshift 系统视图(例如 SVV_TABLE_INFO)。

这种方法对于通过交互式 SQL 查询运行的临时探索、调试或管理任务非常有用,例如在 Amazon Redshift 查询编辑器 V2 或 psql 中。但是,系统目录结构可能会在 Amazon Redshift 版本之间发生变化。我们不建议您依赖直接系统表查询作为生产应用程序集成的元数据接口。

查询系统表时,请遵循以下实践:

  • 指定数据库、架构和表。为了获得最佳性能,请在查询筛选条件中包含数据库名称、架构名称和表名称。缩小范围可以减少 Amazon Redshift 需要扫描和返回的元数据量。

  • 使用等号或 LIKE 筛选条件。在 WHERE 子句中使用等号 (=) 或 LIKE 谓词来缩小结果范围。避免对大型目录视图进行未筛选的查询。在包含许多对象的集群上,此类查询可能会很慢。

  • 避免在筛选条件谓词中使用函数。筛选系统表查询时,请勿在 WHERE 子句中使用诸如 LOWER() 或字符串连接之类的函数。这会妨碍进行高效的元数据查找,并可能显著降低查询性能。

反模式与推荐查询示例

-- Avoid: SELECT * FROM svv_all_columns; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public' AND table_name = 'sales';
-- Avoid: SELECT * FROM svv_all_columns WHERE LOWER(schema_name) = 'public'; -- Recommended: SELECT * FROM svv_all_columns WHERE schema_name = 'public' AND table_name LIKE 'sales%';
-- Avoid: SELECT * FROM svv_all_columns WHERE database_name || '.' || schema_name || '.' || table_name = 'dev.public.sales'; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public' AND table_name = 'sales';
-- Avoid: SELECT * FROM svv_all_columns WHERE CONCAT(database_name, '.', schema_name) = 'dev.public'; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public';