

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# SVL\_QUERY\_REPORT
<a name="r_SVL_QUERY_REPORT"></a>

Amazon Redshift 通过对一系列 Amazon Redshift STL 系统表执行 UNION 来创建 SVL\_QUERY\_REPORT 视图，以提供有关所完成的查询步骤的信息。

此视图按切片和按步骤细分所完成的查询的相关信息，这有助于诊断 Amazon Redshift 集群中的节点和切片问题。

SVL\_QUERY\_REPORT 对所有用户可见。超级用户可以查看所有行；普通用户只能查看其自己的数据。有关更多信息，请参阅 [系统表和视图中的数据可见性](cm_chap_system-tables.md#c_visibility-of-data)。

此表中的部分或全部数据也可以在 SYS 监控视图 [SYS\_QUERY\_DETAIL](SYS_QUERY_DETAIL.md) 中找到。SYS 监控视图中的数据经过格式化处理，便于使用和理解。我们建议您使用 SYS 监控视图进行查询。

## 表列
<a name="r_SVL_QUERY_REPORT-table-rows2"></a>


| 列名称  | 数据类型  | 描述  | 
| --- | --- | --- | 
| userid  | integer  | 生成条目的用户的 ID。 | 
| query  | integer  | 查询 ID。可用于联接各种其他系统表和视图。 | 
| slice  | integer  | 运行该步骤的数据切片。 | 
| segment  | integer  | 段编号。<br />一个查询包含多个区段，而且每个区段包含一个或多个步骤。查询段可并行运行。每个段在一个进程中运行。 | 
| step  | integer  | 已完成的查询步骤。 | 
| start\_time  | timestamp | 开始执行段的确切时间（采用 UTC 表示），秒的小数部分以 6 位精度表示。例如：2012-12-12 11:29:19.131358 | 
| end\_time  | timestamp | 段执行完成的确切时间（采用 UTC 表示），秒的小数部分以 6 位精度表示。例如：2012-12-12 11:29:19.131467 | 
| elapsed\_time  | bigint  | 运行段所花费的时间（微秒）。 | 
| rows  | bigint  | 步骤产生的（每切片）行数。该数字代表执行步骤所产生的切片行数，不是步骤接收或处理的行数。换句话说，这是在该步骤中存留并传递到下一个步骤的行数。 | 
| bytes  | bigint  | 步骤（每个切片）产生的字节数。 | 
| label  | char(256)  | 由查询步骤名称和适用的表 ID 和表名组成的步骤标签（例如 scan tbl=100448 name =user）。三位表 ID 通常是指临时表的扫描。如果显示 tbl=0，则通常是指常量值的扫描。 | 
| is\_diskbased  | character(1)  | 此查询步骤是否已作为基于磁盘的操作执行：true（t）或 false（f）。只有哈希、排序和聚合等特定步骤才能转到磁盘。许多类型的步骤始终在内存中执行。 | 
| workmem  | bigint  | 分配到查询步骤的工作内存量（单位为字节）。此值是分配以供在执行期间使用的 query\_working\_mem 阈值，不是实际使用的内存量  | 
| is\_rrscan  | character(1)  | 如果为 true (t)，则表示对步骤使用了限制范围的扫描。 | 
| is\_delayed\_scan  | character(1)  | 如果为 true (t)，则表示对步骤使用了延迟扫描。 | 
| rows\_pre\_filter | bigint | 对于永久表的扫描，这是在筛选标记为删除的行（虚影行）之前和应用用户定义的查询筛选条件之前发出的行的总数。 | 

## 示例查询
<a name="r_SVL_QUERY_REPORT-sample-queries2"></a>

下面的查询演示了针对查询 ID 为 279 的查询返回的行的数据偏斜。使用此查询可以确定数据库数据是否在数据仓库集群中的切片上均匀分配：

```
select query, segment, step, max(rows), min(rows),
case when sum(rows) > 0
then ((cast(max(rows) -min(rows) as float)*count(rows))/sum(rows))
else 0 end
from svl_query_report
where query = 279
group by query, segment, step
order by segment, step;
```

此查询应返回类似以下示例输出的数据：

```
query | segment | step |   max    |   min    |         case
------+---------+------+----------+----------+----------------------
279 |       0 |    0 | 19721687 | 19721687 |                    0
279 |       0 |    1 | 19721687 | 19721687 |                    0
279 |       1 |    0 |   986085 |   986084 | 1.01411202804304e-06
279 |       1 |    1 |   986085 |   986084 | 1.01411202804304e-06
279 |       1 |    4 |   986085 |   986084 | 1.01411202804304e-06
279 |       2 |    0 |  1775517 |   788460 |     1.00098637606408
279 |       2 |    2 |  1775517 |   788460 |     1.00098637606408
279 |       3 |    0 |  1775517 |   788460 |     1.00098637606408
279 |       3 |    2 |  1775517 |   788460 |     1.00098637606408
279 |       3 |    3 |  1775517 |   788460 |     1.00098637606408
279 |       4 |    0 |  1775517 |   788460 |     1.00098637606408
279 |       4 |    1 |  1775517 |   788460 |     1.00098637606408
279 |       4 |    2 |        1 |        1 |                    0
279 |       5 |    0 |        1 |        1 |                    0
279 |       5 |    1 |        1 |        1 |                    0
279 |       6 |    0 |       20 |       20 |                    0
279 |       6 |    1 |        1 |        1 |                    0
279 |       7 |    0 |        1 |        1 |                    0
279 |       7 |    1 |        0 |        0 |                    0
(19 rows)
```