Redshift:sortkey 是不是应该包含 distkey?

Posted

技术标签:

【中文标题】Redshift:sortkey 是不是应该包含 distkey?【英文标题】:Redshift: Should the sortkey contain the distkey?Redshift:sortkey 是否应该包含 distkey? 【发布时间】:2016-03-24 03:32:19 【问题描述】:

我们有按公司 ID 分片的客户数据。也就是说,任何公司的数据都不会与其他公司的数据混合,因此选择它作为 distkey。

鉴于一个节点可能包含数千家公司,公司 ID 是否应该是排序键中的第一列?还是 distkey 在开始扫描之前已经将数据限制在给定的公司?

【问题讨论】:

distkey 应该是一个性能选择。用它来放置不同的碎片并没有做任何事情。它是透明的。它不像 X 公司可以只连接到分片 Y 并查看他们的数据。 我明白这一点,但它并不能真正回答这个问题。如果我执行查询:SELECT COUNT(*) FROM sales WHERE company_id = 123 它将知道要运行查询的节点,但是 then 它将需要扫描整个节点以查找记录(因此它应该在排序键中),还是节点上的数据被分割成单独的company_id(不需要排序键)? 【参考方案1】:

Dist 键不影响行在每个节点/切片/块中的存储顺序。排序键(或自然顺序,如果没有)defines the order。

如果您希望使用 company_id 进行频繁查询并且希望获得最大性能,请将 company_id 设置为主排序键(COMPOUND 或默认值,而不仅仅是 INTERLEAVED)。

我还建议您熟悉SVL_QUERY_REPORT view。它可以告诉您是否使用了全扫描(或在使用最佳排序键时限制范围)、针对哪些切片以及实际扫描了多少行。为相同的数据尝试不同的表布局,不仅要查看查询时间,还要从这份报告中确认 Redshift 符合您的预期。

【讨论】:

以上是关于Redshift:sortkey 是不是应该包含 distkey?的主要内容,如果未能解决你的问题,请参考以下文章

我应该同时使用一个列作为 distkey 和 sortkey

Redshift 可以使用子查询的结果来按 sortkey 过滤吗?

Redshift:sortkey 和 distkey 可以为空吗?

Redshift在建表时有sortkey选项来提高查询性能,DolphinDB有类似的机制吗?

为啥我的查询仍然在 Redshift 中使用 sortkey 进行全表扫描?

Redshift:主表的 DIST KEY 和 SORT KEY 的适当组合是啥?