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?