我试图通过另外指定表的主键,在redshift中使用CTAS子句复制表。
尝试下面的语法,但没有运气。但是,我能够使用相同的语法
指定DISTKEY / SORTKEYcreate table date_dim
PRIMARY KEY(date_key)
--DISTKEY ( date_key )
as
select date_key,
calendar_date,.....;
我想使用主键作为我在流程中设计的合并逻辑的一部分。
TIA!
答案 0 :(得分:3)
许多人认为Redshift中的主键和外键是一种反模式(因为它们没有强制执行),但是我的团队构建了一个支持这种情况的小工具(Python脚本)。
您可以在普通的SQL文件中编写select
语句,在YAML配置文件中定义主键,外键,distkey等,然后使用脚本来生成(并选择执行)SQL以创建和填充表格。
我们还包括一个Airflow运算符,以使其易于计划和自动执行。
回购是here,我们为此写了更多on our team blog
答案 1 :(得分:0)
Redshift不支持主键和外键约束:http://docs.aws.amazon.com/redshift/latest/dg/t_Defining_constraints.html
答案 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);