我有一个带页面命中的Redshift表,如此
CREATE TABLE hits
(
user_id INT,
ts TIMESTAMP,
page VARCHAR(255)
)
SORTKEY(user_id, ts)
DISTKEY(user_id);
由于我将在user_id
上运行一堆窗口函数,我认为通过user_id
分发表是个好主意,因此节点不必交换用户数据在能够执行查询之前。
但是用户只在一段时间内处于活动状态并按顺序编号。因此,user_id和time是相关的,因此每当我运行按时间(ts
)子集的查询时,如果Redshift也按顺序分配user_id
,则会导致偏差。如果它由DISTKEY
随机分布,那么问题就不那么严重了。我的问题是:是吗?
(我是Redshift的新手所以所有这些可能只是对事情如何运作的完全误解。在这种情况下,请提前道歉!)
答案 0 :(得分:2)
Amazon Redshift使用DISTRIBUTION KEY(DISTKEY)的哈希在节点之间分发数据记录。
因此,记录将在3节点集群上以不同于4节点集群的方式进行分发。
如果您正在寻找均匀分布的数据,请使用EVEN
分发方法,该方法只是在节点之间均匀地分布记录。 (但是,这对于您的用例来说不太可能是最佳的。)
参见文档: