想象一下,我有一个大型事实表和一个小型且经常更改的连接表。
我的小连接表的全部内容可能适合一个切片。
如何将连接表的副本推送到集群的每个切片(或至少每个节点)上?如果我能做到这一点,我的加入不是会更快吗?
想象一下,我有一个大型事实表和一个小型且经常更改的连接表。
我的小连接表的全部内容可能适合一个切片。
如何将连接表的副本推送到集群的每个切片(或至少每个节点)上?如果我能做到这一点,我的加入不是会更快吗?
Redshift 最近添加了对新分发类型“DISTSTYLE ALL”的支持,它完全符合 OP 的要求。
http://docs.aws.amazon.com/redshift/latest/dg/c_choosing_dist_sort.html
您可以尝试将 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 列中有类似的值。