在 Amazon Redshift 中使用 Diststyle ALL 的表应该有多小?

Posted

技术标签:

【中文标题】在 Amazon Redshift 中使用 Diststyle ALL 的表应该有多小?【英文标题】:How small should a table using Diststyle ALL be in Amazon Redshift? 【发布时间】:2016-04-12 06:04:27 【问题描述】:

这里写着:http://dwbitechguru.blogspot.com/2014/11/performance-tuning-in-amazon-redshift.html 对于 vey 小表,redshift 应该使用 diststyle ALL 而不是 EVEN 或 KEY。小有多小?如果我要在查询的 where 子句中指定行号:select relname, reldiststyle from pg_class 我应该指定多少行?

【问题讨论】:

【参考方案1】:

通过考虑星型模式,所有分布样式通常用于维度表。这样做的好处是可以加快连接速度,让我们通过一个例子来解释一下。如果我们想按国家/地区获得每种产品的销售数量,我们需要将 fact_sales 与 store_id 键上的 dim_store 表连接起来。

因此,在 dim_store 上设置 diststyle all 使我们能够并行执行 JOIN 结果,这与启用 diststyle 时的洗牌的缺点相比。但是,您可以通过设置 distyle auto 让 Redshift 自动处理最佳分发方式,更多信息请查看this 链接。

【讨论】:

【参考方案2】:

这实际上取决于您使用的集群大小。 DISTSTYLE ALL 会将表的数据复制到所有节点 - 以减轻跨节点的数据传输需求。你可以找出你的表的大小和 Redshift 节点的可用大小,如果你能负担得起每个节点多次复制表,那就去做吧!

此外,如果您需要非常频繁地将其他表与该表连接起来,例如在 70% 的查询中,我相信如果您想要更好的查询性能,那么这个空间是值得的。

如果您跨表的联接键在基数方面相同,那么您还可以在该键上分配所有表,以便相似的键位于同一节点中,从而避免数据复制。

我建议尝试上述两个选项,并比较大约 10 个查询的平均查询运行时间,然后做出决定。

【讨论】:

还取决于您的数据集和使用情况。如果您有 >50M 行的表,则小表可以是

以上是关于在 Amazon Redshift 中使用 Diststyle ALL 的表应该有多小?的主要内容,如果未能解决你的问题,请参考以下文章

我们可以在 Amazon redshift 中使用 CTAS 创建表时使用压缩吗

如何在 Amazon Redshift 中使用 Hibernate 插入实体

不使用 jdbc 驱动程序查询 Amazon Redshift

使用 Amazon Redshift / PostgreSQL 进行队列分析

在 Amazon Redshift 中使用窗口函数时需要 GROUP BY 聚合

复制命令 Amazon Redshift