Amazon redshift 红移是否按DISTKEY顺序分布?

Amazon redshift 红移是否按DISTKEY顺序分布?,amazon-redshift,Amazon Redshift,我有一张红移的表格,上面有页面点击,就像这样 CREATE TABLE hits ( user_id INT, ts TIMESTAMP, page VARCHAR(255) ) SORTKEY(user_id, ts) DISTKEY(user_id); 由于我将在user\u id上运行一系列窗口函数,因此我认为通过user\u id分发表是一个好主意,这样节点就不必在执行查询之前交换用户的数据 但用户只在一段时间内处于活动状态,并按顺序编号。因此,用户id和时间是相关的,因此

我有一张红移的表格,上面有页面点击,就像这样

CREATE TABLE hits
(
  user_id INT,
  ts TIMESTAMP,
  page VARCHAR(255)
)
SORTKEY(user_id, ts)
DISTKEY(user_id);
由于我将在
user\u id
上运行一系列窗口函数,因此我认为通过
user\u id
分发表是一个好主意,这样节点就不必在执行查询之前交换用户的数据

但用户只在一段时间内处于活动状态,并按顺序编号。因此,用户id和时间是相关的,因此每当我运行按时间(
ts
)划分子集的查询时,如果红移也按
用户id
顺序分布,这将导致偏移。如果它是由
DISTKEY
随机分发的,那么问题就不会那么严重了。我的问题是:是吗


(我不熟悉Redshift,所以所有这些可能只是对总体工作原理的完全误解。在这种情况下,请提前道歉!)

Amazon Redshift使用分发密钥(DISTKEY)的散列来在节点之间分发数据记录

因此,记录在3节点集群上的分布将不同于4节点集群

如果要查找均匀分布的数据,请使用
偶数
分布方法,该方法只需在节点之间均匀分布记录。(然而,对于您的用例来说,这不太可能是最佳的。)

见文件:


只是为了更好地理解这一点:如果我有两个单独的表,它们具有相同的列名和类型,并且在其中一列中共享一些值。如果我将此列设置为DISTKEY,那么DISTKEY上具有相同值的行是否会独立于它们所在的表而最终位于同一节点上?我相信这是真的,但我找不到任何文档专门这样说。该值通过散列函数传递,然后散列函数在节点之间分发内容。列名不需要匹配,它只使用字段的值。@是的,具有相同DISTKEY值的行最终位于相同的节点上,这将启用
merge
join。有关
merge
vs
hash
joins的信息,请参见doc,特别是关于连接类型的部分。@JohnRotenstein我们可以引用Redshift使用分发密钥的散列来分发数据记录吗?他们这样做是有道理的,但我在这里的链接中没有看到任何关于这种设计选择的文档。@andrew可能还有其他参考资料,但我在(由Redshift团队的一名开发人员编写的)上找到了一个提及。这也是一篇很棒的文章!