我尝试在Amazon Redshift中创建索引,但收到错误
create index on session_log(UserId);
UserId
是一个整数字段。
答案 0 :(得分:46)
如果您尝试在Redshift表上创建索引(带名称):
create index IX1 on "SomeTable"("UserId");
您将收到错误
执行SQL命令时发生错误: 在" SomeTable"(" UserId")上创建索引IX1 错误:SQL命令"创建索引IX1 on" SomeTable"(" UserId")" Redshift表不支持。
这是因为,与其他data warehouses一样,Redshift使用columnar storage,因此,其他RDBMS中使用的许多索引技术(如添加非聚集索引)都不是适用。
但您可以选择为每个表提供一个sort key,还可以使用distribution key来分析数据,并为每列选择合适的compression encodings来影响效果最小化存储和I / O开销。
例如,在您的情况下,您可以选择使用UserId
作为排序键:
create table if not exists "SomeTable"
(
"UserId" int,
"Name" text
)
sortkey("UserId");
答案 1 :(得分:3)
Redshift允许创建主键
create table user (
id int ,
phone_number int,
primary key(id))
但由于Redshift不强制执行此约束,因此主键接受重复值。
关于该问题的附件
http://www.sqlhaven.com/amazon-redshift-what-you-need-to-think-before-defining-primary-key/
答案 2 :(得分:1)
您可以ex1.jpg但仅限于提供信息,正如亚马逊所说:Amazon Redshift并未强制执行这些信息。尽管如此,主键和外键用作计划提示,如果您的ETL过程或应用程序中的某些其他过程强制执行它们,则应声明它们。
某些服务(如带有插入模式的管道(REPLACE_EXISTING))需要在表中定义主键。
出于其他表现目的,斯图尔特的回答是正确的。