Redshift:如何将连接表的副本复制到集群中的每个切片上?

Posted

技术标签:

【中文标题】Redshift:如何将连接表的副本复制到集群中的每个切片上?【英文标题】:Redshift: how do I get a copy of my join table onto each slice in my cluster? 【发布时间】:2013-06-07 03:31:05 【问题描述】:

假设我有一个大的事实表和一个小且经常变化的连接表。

我的小连接表的全部内容可能适合一个切片。

如何将连接表的副本推送到集群的每个切片(或至少每个节点)?如果我能做到这一点,我的连接不是会大大加快吗?

【问题讨论】:

【参考方案1】:

Redshift 最近添加了对新分发类型“DISTSTYLE ALL”的支持,它完全符合 OP 的要求。

http://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html

【讨论】:

【参考方案2】:

您可以尝试将 DISTRIBUTION KEY 设置到同一列(在事实表和连接表中) - 这样将连接的所有行都将位于相同的节点上。

只有在连接列中的值分布均匀时才有效 - 只有这样数据才会在节点之间均匀分布。

您可以使用查询检查表的数据分布:

select slice, col, num_values, minvalue, maxvalue
from svv_diskusage
where name = '__INSERT__TABLE__NAME__HERE__' and col = 0
order by slice, col;

您希望在 num_values 列中有相似的值。

【讨论】:

以上是关于Redshift:如何将连接表的副本复制到集群中的每个切片上?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过脚本将redshift集群快照从一个账户复制到另一个账户

创建 Redshift 生产的副本,每个表中的 # 条记录有限

如何将嵌套的 Avro 字段作为单个字段复制到 Redshift?

我需要将数据库从一个 Redshift 集群复制到另一个集群

如何连接到 Redshift 中的私有集群?

将文件从 s3 复制到 redshift 花费的时间太长