

 从补丁 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="t_Distributing_data"></a>

将数据加载到表中时，Amazon Redshift 根据表的分配方式将表中的行分配到各个计算节点。在运行查询时，查询优化程序根据执行任何联接和聚合的需要将行重新分配到计算节点。选择表分配方式的目的是，在执行查询前找到数据必须处于的位置，从而最大程度地减小重新分配步骤的影响。

**注意**  
本部分将介绍 Amazon Redshift 数据库中的数据分配原则。我们建议您使用 `DISTSTYLE AUTO` 创建表。如果您这样做，则 Amazon Redshift 会使用自动表优化来选择数据分配方式。有关更多信息，请参阅 [自动表优化](t_Creating_tables.md)。本节的其余部分提供了有关分配方式的详细信息。

**Topics**
+ [数据分配概念](#t_data_distribution_concepts)
+ [分配方式](c_choosing_dist_sort.md)
+ [查看分配方式](viewing-distribution-styles.md)
+ [评估查询模式](t_evaluating_query_patterns.md)
+ [指定分配方式](t_designating_distribution_styles.md)
+ [评估查询计划](c_data_redistribution.md)
+ [查询计划示例](t_explain_plan_example.md)
+ [分配示例](c_Distribution_examples.md)

## 数据分配概念
<a name="t_data_distribution_concepts"></a>

遵循 Amazon Redshift 的一些数据分配概念。

 **节点和切片** 

 Amazon Redshift 集群是一组节点。集群中的每个节点拥有自己的操作系统、专用内存和专用磁盘存储。有个节点是*领导节点*，它负责将数据和查询处理任务分配到计算节点。*计算节点*提供完成这些任务的资源。

 计算节点的磁盘存储分成一系列*切片*。每个节点的切片数取决于集群的节点大小。所有节点均参与并行查询的运行，处理尽可能跨切片均匀分布的数据。有关每个节点大小拥有的切片数的更多信息，请转到《Amazon Redshift 管理指南》**中的[关于集群和节点](https://docs.aws.amazon.com/redshift/latest/mgmt/working-with-clusters.html#rs-about-clusters-and-nodes)。

 **数据重新分配** 

 将数据加载到表中时，Amazon Redshift 根据表的分配方式将表中的行分配到各个节点切片。作为查询计划的一部分，优化程序确定必须将数据块放置在何处，以最好地运行查询。然后，在查询运行时，数据被实际移动或重新分配。重新分配可能涉及将特定的行发送到节点以进行联接，或将整个表广播到所有节点。

 数据重新分配可能占到查询计划成本的一大部分，其产生的网络流量可能会影响其他数据库操作并降低整个系统的性能。在切实可行的范围内，预测最佳的数据初始放置位置可以尽可能地减少数据分配的影响。

 **数据分配目标** 

 将数据加载到表中时，Amazon Redshift 根据您在创建表时选择的分配方式将表中的行分配到计算节点和切片。数据分配有两个主要目标：
+ 将工作负载均匀地分配到集群中的节点上。不均匀的分配或数据分配偏斜会导致某些节点执行的工作比其他节点多，从而影响查询性能。
+ 在查询运行时，尽量减少数据移动。如果参与联接或聚合的行已在节点上与其在其他表中的联接行并置，则优化程序在查询执行期间不必重新分配过多的数据。

您为数据库选择的分配策略会对查询性能、存储需求、数据加载和维护产生重大影响。通过为每张表选择最佳的分配方式，您可以均衡数据分配并显著提高整个系统的性能。