gpt4 book ai didi

amazon-redshift - Redshift : Is using a foreign key necessary to take advantage of distribution keys?

转载 作者:行者123 更新时间:2023-12-04 12:26:22 27 4
gpt4 key购买 nike

在 Amazon 的指南中,他们提到为所有表指定 PRIMARY 和 FOREIGN KEY,然后在有意义的地方指定分配键,例如在经常用于将表连接在一起的列上。我知道即使使用单个表查询,正确的 DISTKEY 规范也有助于执行 GROUP BY,但是对于连接两个或多个表,是否还必须将 DISTKEY 列指定为 FOREIGN KEY?或者 Redshift 是否会根据用作 DISTKEY 的列的数据类型(可能还有名称)将来自不同表的行共同定位到相同的节点?

我问的原因是因为我并没有在我的应用程序中真正使用维度表。我可以简单地创建它们作为外键引用来帮助分配,但随后必须维护维度表。

考虑以下示例,其中我有两个经常连接的表:

CREATE TABLE motorcycles
(
id INT,
hexcolor CHAR(6)
);

CREATE TABLE helmets
(
id INT,
hexcolor CHAR(6)
);

现在假设在我的应用程序中,我们经常在 hexcolor 列上将摩托车表连接到 Helm 表。那么使用 DISTSTYLE KEY 才有意义并使用 DISTKEY (hexcolor) , 对?但是,您不能真正说摩托车表中的 hexcolor 列是 Helm 表的外键,反之亦然。我可以创建一个维度表,其中包含所有可能的十六进制颜色值的列表,然后摩托车和 Helm 表都可以有这个维度表的外键,但是维护这个维度表会很痛苦( Amazon 的指南还警告不要指定未正确维护的主键或外键,因为这会混淆查询计划器)。

那么,以我的摩托车和 Helm 为例,维度表的外键是否必要?或者 Redshift 是否会假设它应该基于用作分布键的列的数据类型相同的事实以相同的方式分布这两个表的行?

最佳答案

只要列具有相同的数据类型,您就应该期望 Redshift 以相同的方式分布摩托车和 Helm 表。

在您的情况下,没有理由使用外键。查询计划器将能够利用表由相同键分布的事实。

但是阅读执行计划并确保它显示 DS_DIST_NONE 总是好的 - 这意味着不需要数据重新分配。

关于amazon-redshift - Redshift : Is using a foreign key necessary to take advantage of distribution keys?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33512517/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com