首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么Redshift使用DISTKEY和DISTSTYLE创建表查询不工作?

为什么Redshift使用DISTKEY和DISTSTYLE创建表查询不工作?
EN

Stack Overflow用户
提问于 2019-10-23 00:24:37
回答 2查看 2.2K关注 0票数 0

我在Redshift中运行这个查询:

代码语言:javascript
运行
复制
CREATE TABLE my_table(
    auto_increment              BIGINT          IDENTITY(0, 1),
    id                          INTEGER         NOT NULL,
    col_1                       INTEGER         NOT NULL DISTKEY SORTKEY,
    foreign key(col_1) references foreign_table(id),
    col_2                       INTEGER,
    col_3                       VARCHAR(255),
    col_4                       TIMESTAMP       DEFAULT CURRENT_TIMESTAMP,
    col_5                       TIMESTAMP,
    PRIMARY KEY (id)
) DISTSTYLE ALL;

但是我说了一个错误:Cannot specify DISTKEY for column "col_1" of table "my_table" when DISTSTYLE is NONE or EVEN;

我为什么要犯这个错误?我该怎么解决呢?谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-23 03:56:20

分发样式可以是几个选项之一。来自分发样式-亚马逊红移

  • Auto: Amazon根据表数据的大小分配一种优化的分发样式。
  • 事件:领导节点以一种循环的方式将行分布在片上。
  • 键:行是根据一列中的值分布的。
  • All:整个表的副本分发给每个节点。

本规范:

代码语言:javascript
运行
复制
col_1                       INTEGER         NOT NULL DISTKEY SORTKEY,

告诉Redshift使用Key发行版样式,因为它将列指定为DISTKEY

然而,底部的DISTSTYLE ALL告诉Redshift使用All发行版样式。

因此,Redshift给出了一个错误,因为已经请求了两种不同的分发样式。你需要挑一个,而不是两者都选。

考虑到您选择了一个列为DISTKEY,您可能应该删除DISTSTYLE ALL

DISTKEYSORTKEY的快速指南是:

  • 对于DISTKEY,使用联接中最常用的列
  • 对于SORTKEY,使用最常用的列

我注意到您已经为DISTKEYSORTKEY选择了一列。您可能需要确认这是否适合您的数据。

票数 1
EN

Stack Overflow用户

发布于 2019-10-23 08:52:00

当您的DISTKEYALL时,不能将列指定为ALL

DISTSTYLE ALL的意思是您的表将作为一个整体进行复制,并存储在所有节点上,因此您不会通过任何KEY分发数据。

因此,如果要基于DISTKEY分发数据,则必须设置DISTSTYLE KEY

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58513886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档