像在Redshift中定义主键一样创建表

时间:2017-09-18 20:51:06

标签: primary-key amazon-redshift

我试图通过另外指定表的主键,在redshift中使用CTAS子句复制表。

尝试下面的语法,但没有运气。但是,我能够使用相同的语法

指定DISTKEY / SORTKEY
create table date_dim
PRIMARY KEY(date_key)
--DISTKEY ( date_key )
as
   select date_key,
   calendar_date,.....;

我想使用主键作为我在流程中设计的合并逻辑的一部分。

TIA!

4 个答案:

答案 0 :(得分:3)

许多人认为Redshift中的主键和外键是一种反模式(因为它们没有强制执行),但是我的团队构建了一个支持这种情况的小工具(Python脚本)。

您可以在普通的SQL文件中编写select语句,在YAML配置文件中定义主键,外键,distkey等,然后使用脚本来生成(并选择执行)SQL以创建和填充表格。

我们还包括一个Airflow运算符,以使其易于计划和自动执行。

回购是here,我们为此写了更多on our team blog

答案 1 :(得分:0)

答案 2 :(得分:0)

您只能在CTAS中指定 distkey sortkey 。以下链接描述了您可以指定的所有选项 Redshift CTAS

答案 3 :(得分:0)

如果您希望复制为主键的列已经不可为空,则可以使用以下方法:

ALTER TABLE <table_name> ADD CONSTRAINT <a_name_for_this_constraint> PRIMARY KEY (<attribute_name>)

例如:ALTER TABLE member ADD CONSTRAINT pk_1 PRIMARY KEY (member_id);