我在Redshift中运行这个查询:
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;
我为什么要犯这个错误?我该怎么解决呢?谢谢!
发布于 2019-10-23 03:56:20
分发样式可以是几个选项之一。来自分发样式-亚马逊红移
本规范:
col_1 INTEGER NOT NULL DISTKEY SORTKEY,
告诉Redshift使用Key发行版样式,因为它将列指定为DISTKEY
。
然而,底部的DISTSTYLE ALL
告诉Redshift使用All
发行版样式。
因此,Redshift给出了一个错误,因为已经请求了两种不同的分发样式。你需要挑一个,而不是两者都选。
考虑到您选择了一个列为DISTKEY
,您可能应该删除DISTSTYLE ALL
。
DISTKEY
和SORTKEY
的快速指南是:
DISTKEY
,使用联接中最常用的列SORTKEY
,使用最常用的列我注意到您已经为DISTKEY
和SORTKEY
选择了一列。您可能需要确认这是否适合您的数据。
发布于 2019-10-23 08:52:00
当您的DISTKEY
是ALL
时,不能将列指定为ALL
。
DISTSTYLE ALL
的意思是您的表将作为一个整体进行复制,并存储在所有节点上,因此您不会通过任何KEY
分发数据。
因此,如果要基于DISTKEY
分发数据,则必须设置DISTSTYLE KEY
。
https://stackoverflow.com/questions/58513886
复制相似问题