

 2026 年 6 月 30 日之后，Amazon Redshift 不再支持使用 Python UDF。我们将分阶段开始执行。有关 Python 生命周期终止和迁移选项详情的更多信息，请参阅 2025 年 6 月 30 日发布的[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 查询系统表
<a name="discovering-metadata-system-tables"></a>

如果驱动程序元数据 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()` 或字符串连接之类的函数。这会妨碍进行高效的元数据查找，并可能显著降低查询性能。

## 反模式与推荐查询示例
<a name="r_QUERY_LIST-examples"></a>

```
-- 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';
```