Redshift:sortkey 和 distkey 可以为空吗?

Posted

技术标签:

【中文标题】Redshift:sortkey 和 distkey 可以为空吗?【英文标题】:Redshift: Can sortkey and distkey be nullable? 【发布时间】:2016-06-08 15:27:21 【问题描述】:

可以将可为空的字段定义为 sortkey 和 distkey 吗? 我不希望有很多空值,但它可能会发生。 谢谢

【问题讨论】:

【参考方案1】:

虽然 Redshift 可以使用可为空的 DIST 键,但您必须小心。

如果 DIST 键列中的许多行具有相同的值(无论是 NULL 还是其他值),则所有这些行最终都将位于同一个节点上。所以建议使用值分布均匀的列作为dist key,即任何值出现的频率与任何其他值相似。

当列可以为空时,与其他值相比,NULL 值通常在频率方面存在偏差。这将导致节点之间的负载分布不均匀,并且在 x1.large 节点的情况下,您也可能很快耗尽该节点上的磁盘空间。

所以,我建议选择一个不允许 NULL 的列,但显然它还需要在逻辑上与您的联接模式匹配。如果您没有连接,我宁愿建议在这种情况下使用 EVEN dist 样式,以确保负载分布均匀。

【讨论】:

【参考方案2】:

是的,它们都可以为空。

我们在 prod 数据库中将它们都设为 null,一切正常。

【讨论】:

以上是关于Redshift:sortkey 和 distkey 可以为空吗?的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

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

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

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