作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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)
);
DISTSTYLE KEY
才有意义并使用
DISTKEY (hexcolor)
, 对?但是,您不能真正说摩托车表中的 hexcolor 列是 Helm 表的外键,反之亦然。我可以创建一个维度表,其中包含所有可能的十六进制颜色值的列表,然后摩托车和 Helm 表都可以有这个维度表的外键,但是维护这个维度表会很痛苦( Amazon 的指南还警告不要指定未正确维护的主键或外键,因为这会混淆查询计划器)。
最佳答案
只要列具有相同的数据类型,您就应该期望 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/
我是一名优秀的程序员,十分优秀!