

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

# 检查查询计划步骤
<a name="reviewing-query-plan-steps"></a>

您可以通过运行 EXPLAIN 命令来查看查询计划中的步骤。以下示例显示了 SQL 查询并解释了输出。自下而上阅读该查询计划，您可以了解执行该查询所用的每个逻辑操作。有关更多信息，请参阅 [创建和解释查询计划](c-the-query-plan.md)。

```
explain
select eventname, sum(pricepaid) from sales, event
where sales.eventid = event.eventid
group by eventname
order by 2 desc;
```

```
XN Merge  (cost=1002815366604.92..1002815366606.36 rows=576 width=27)
  Merge Key: sum(sales.pricepaid)
  ->  XN Network  (cost=1002815366604.92..1002815366606.36 rows=576 width=27)
        Send to leader
        ->  XN Sort  (cost=1002815366604.92..1002815366606.36 rows=576 width=27)
              Sort Key: sum(sales.pricepaid)
              ->  XN HashAggregate  (cost=2815366577.07..2815366578.51 rows=576 width=27)
                    ->  XN Hash Join DS_BCAST_INNER  (cost=109.98..2815365714.80 rows=172456 width=27)
                          Hash Cond: ("outer".eventid = "inner".eventid)
                          ->  XN Seq Scan on sales  (cost=0.00..1724.56 rows=172456 width=14)
                          ->  XN Hash  (cost=87.98..87.98 rows=8798 width=21)
                                ->  XN Seq Scan on event  (cost=0.00..87.98 rows=8798 width=21)
```

作为生成查询计划的一部分，查询优化程序将计划分解为流、分段和步骤。查询优化程序将分解计划，以准备将数据和查询工作负载分配到计算节点。有关流、分段和步骤的更多信息，请参阅[查询计划和执行工作流程](c-query-planning.md)。

下图显示了前面的查询和关联的查询计划。它显示涉及的查询操作如何映射到 Amazon Redshift 用于为计算节点切片生成编译代码的步骤。每个查询计划操作映射到段中的多个步骤，有时映射到流中的多个段。

![\[一个查询及其关联的查询计划映射到三个数据流。\]](http://docs.aws.amazon.com/zh_cn/redshift/latest/dg/images/map-plan-to-streams.png)


在此图中，查询优化程序运行查询计划，如下所示：

1. 在 `Stream 0` 中，查询通过顺序扫描操作运行 `Segment 0`，以扫描 `events` 表。查询继续通过哈希操作运行 `Segment 1`，以为联接中的内部表创建哈希表。

1. 在 `Stream 1` 中，查询通过顺序扫描操作运行 `Segment 2`，以扫描 `sales` 表。它继续使用哈希联接运行 `Segment 2` 以联接表，其中联接列不是分配键和排序键。它再次继续通过哈希聚合来运行 `Segment 2`，以聚合结果。然后，查询使用哈希聚合操作运行 `Segment 3` 来执行未排序的分组聚合函数和排序操作，以评估 ORDER BY 子句和其他排序操作。

1. 在 `Stream 2` 中，查询在 `Segment 4` 和 `Segment 5` 中运行网络操作，以将中间结果发送到领导节点以待进一步处理。

查询的最后一个分段返回数据。如果聚合或对返回集进行排序，则计算节点将各自的中间结果段发送到领导节点。然后，领导节点合并数据，以便将最终结果发送回请求客户端。

有关 EXPLAIN 运算符的更多信息，请参阅[EXPLAIN](r_EXPLAIN.md)。