分配方式 - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

分配方式

创建表时,您可以指定四种分配方式之一:AUTO、EVEN、KEY 或 AUTO。

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

AUTO 分配

在自动 (AUTO) 分配方式下,Amazon Redshift 基于表数据大小分配最佳分配方式。例如,Amazon Redshift 最初向小型表分配的是 ALL 分配,然后在表变大时更改为 EVEN 分配。当表从 ALL 分配更改为 EVEN 分配时,存储利用率可能略有变化。几秒钟后,分配更改将在后台进行。

当您将 DISTSTYLE 设置为 AUTO 时,Amazon Redshift 可能会将您的表格数据的分配更改为具有基于 KEY 的分配方式。要查看 Amazon Redshift 自动执行的更改表分配键的操作,请参阅SVL_AUTO_WORKER_ACTION。要查看有关更改表分配键的当前建议,请参阅SVV_ALTER_TABLE_RECOMMENDATIONS

要查看应用于表的分配方式,请查询 PG_CLASS_INFO 系统目录视图。有关更多信息,请参阅查看分配方式。如果未使用 CREATE TABLE 语句指定分配方式,Amazon Redshift 将应用自动 (AUTO) 分配。

EVEN 分配

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

KEY 分配

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

ALL 分配

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

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

注意

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

在特定场景中,表创建完毕后,您可更改其分配方式。有关更多信息,请参阅ALTER TABLE。对于在创建表之后无法更改其分配方式的场景,您可以重新创建表并使用深层复制来填充新表。有关更多信息,请参阅执行深层复制