

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

创建表时，您可以指定以下分配方式之一：AUTO、EVEN、KEY 或 ALL。

如果未指定分配方式，Amazon Redshift 使用自动 (AUTO) 分配。

 **AUTO 分配** 

在自动 (AUTO) 分配方式下，Amazon Redshift 基于表数据大小分配最佳分配方式。例如，如果指定 AUTO 分配方式，Amazon Redshift 最初向小型表指定的是 ALL 分配方式。当表变大时，Amazon Redshift 可能会将分配方式更改为 KEY，选择主键（或复合主键的列）作为分配键。如果表变大且没有任何一列适合用作分配键，Amazon Redshift 会将分配方式更改为 EVEN。分配方式的更改在后台进行，对用户查询的影响极小。

要查看 Amazon Redshift 自动执行的更改表分配键的操作，请参阅[SVL\$1AUTO\$1WORKER\$1ACTION](r_SVL_AUTO_WORKER_ACTION.md)。要查看有关更改表分配键的当前建议，请参阅[SVV\$1ALTER\$1TABLE\$1RECOMMENDATIONS](r_SVV_ALTER_TABLE_RECOMMENDATIONS.md)。

要查看应用于表的分配方式，请查询 PG\$1CLASS\$1INFO 系统目录视图。有关更多信息，请参阅 [查看分配方式](viewing-distribution-styles.md)。如果未使用 CREATE TABLE 语句指定分配方式，Amazon Redshift 将应用自动 (AUTO) 分配。

 **EVEN 分配** 

 不管任意特定列中的值是什么，领导节点都以轮询方式向所有切片分配行。当表不参与联接时，适合使用 EVEN 分配。当 KEY 分配和 ALL 分配之间没有明确的选择时，这种方法也很适合。

 **KEY 分配** 

 根据一列中的值分配行。领导节点会将匹配的值放置到同一个节点切片上。如果基于联接键分配一对表，领导节点会根据联接列中的值在切片上并置行。这样一来，共同列的匹配值将实际存储在一起。

 **ALL 分配** 

 向每个节点分配整个表的副本。EVEN 分配或 KEY 分配只将表中的部分行放置在每个节点上，而 ALL 分配则确保为该表参与的所有联接并置每一行。

 ALL 分配需要以集群中节点数量为倍数的存储空间，因此，它需要长得多的时间来加载、更新或插入数据到多个表中。ALL 分配只适用于移动相对缓慢的表；即更新不频繁、不广泛的表。由于在查询过程中重新分配小表的成本很低，因此将小维度表定义为 DISTSTYLE ALL 没有显著好处。

**注意**  
 当您为某个列指定分配方式后，Amazon Redshift 会在集群级别处理数据分配。Amazon Redshift 不需要、也不支持数据库对象中的数据分区概念。您不需要创建表空间或为表定义分区方案。

在特定场景中，表创建完毕后，您可更改其分配方式。有关更多信息，请参阅 [ALTER TABLE](r_ALTER_TABLE.md)。对于在创建表之后无法更改其分配方式的场景，您可以重新创建表并使用深层复制来填充新表。有关更多信息，请参阅[执行深层复制](performing-a-deep-copy.md)。